()head=bpy.context.objectbpy.context.object.name="head"r_eye=bpy.ops.mesh.primitive_uv_sphere_add()bpy.context.object.name ="r_eye"bpy.context.object.location=(0.7,0.5,0.3)bpy.context.object.scale=(0.3,0.3,0.3)mat=bpy.data.materials.new =headl_eye=bpy.ops.mesh.primitive_uv_sphere_add()bpy.context.object.name="l_eye"bpy.context.object.location =(0.7,-0.5,0.3)bpy.context.object.scale=(0.3,0.3,0.3)bpy.context.object.data.materials.append(mat)bpy.context.object.parent =(0,0,-3)camera=bpy.data.cameras.new('Camera')camera_obj=bpy.data.objects.new('Camera',camera)bpy.data.collections
(action="SELECT")bpy.ops.object.delete()defcreate_man():bpy.ops.mesh.primitive_uv_sphere_add()bpy.ops.mesh.primitive_cone_add (action="SELECT")bpy.ops.object.delete()defcreate_man():bpy.ops.mesh.primitive_uv_sphere_add()bpy.ops.mesh.primitive_cone_add ="SELECT")bpy.ops.object.delete()defcreate_man():bpy.ops.mesh.primitive_uv_sphere_add()bpy.ops.mesh.primitive_cone_add (action="SELECT")bpy.ops.object.delete()defcreate_man():man=bpy.data.objects.new("man",None)bpy.data.collections =50bpy.context.scene.render.engine='CYCLES'bpy.context.scene.render.filepath='/tmp/o.png'bpy.ops.render.render
()head=bpy.context.objectbpy.context.object.name="head"r_eye=bpy.ops.mesh.primitive_uv_sphere_add()bpy.context.object.name ="r_eye"bpy.context.object.location=(0.7,0.5,0.3)bpy.context.object.scale=(0.3,0.3,0.3)mat=bpy.data.materials.new =headl_eye=bpy.ops.mesh.primitive_uv_sphere_add()bpy.context.object.name="l_eye"bpy.context.object.location =(0,0,-3)camera=bpy.data.cameras.new('Camera')camera_obj=bpy.data.objects.new('Camera',camera)bpy.data.collections =headl_eye=bpy.ops.mesh.primitive_uv_sphere_add()bpy.context.object.name="l_eye"bpy.context.object.location
bpy.ops.mesh.primitive_cube_add(size=2)bpy.context.object.scale=(1,0.5,0.25)bpy.context.object.location [0]=pi/2bpy.context.object.parent=c919bpy.context.object.name="body"bpy.ops.mesh.primitive_cube_add(size =2)bpy.context.object.scale=(0.2,0.75,1)bpy.context.object.parent=c919bpy.context.object.rotation_euler =(0,5,1)bpy.context.object.parent=c919bpy.context.object.name="tail2"bpy.ops.mesh.primitive_cube_add( size=2)bpy.context.object.scale=(5,1,0.25)bpy.context.object.location=(0,-1,0)bpy.context.object.parent
(radius=1,depth=9)bpy.context.object.rotation_euler[0]=pi/2bpy.context.object.parent=c919bpy.context.object.name ="body"bpy.ops.mesh.primitive_cube_add(size=2)bpy.context.object.scale=(0.2,0.75,1)bpy.context.object.parent =c919bpy.context.object.rotation_euler[0]=-pi/4bpy.context.object.location=(0,5,1)bpy.context.object.parent =c919bpy.context.object.name="tail1"bpy.ops.mesh.primitive_cube_add(size=2)bpy.context.object.scale=( 1,0.5,0.25)bpy.context.object.location=(0,5,1)bpy.context.object.parent=c919bpy.context.object.name="
()head=bpy.context.objectbpy.context.object.name="head"r_eye=bpy.ops.mesh.primitive_uv_sphere_add()bpy.context.object.name ="r_eye"bpy.context.object.location=(0.7,0.5,0.3)bpy.context.object.scale=(0.3,0.3,0.3)mat=bpy.data.materials.new =headl_eye=bpy.ops.mesh.primitive_uv_sphere_add()bpy.context.object.name="l_eye"bpy.context.object.location =bpy.ops.mesh.primitive_uv_sphere_add()bpy.context.object.name="r_eye"bpy.context.object.location=(0.7,0.5,0.3 =headl_eye=bpy.ops.mesh.primitive_uv_sphere_add()bpy.context.object.name="l_eye"bpy.context.object.location
[0]=pi/2bpy.context.object.parent=c919bpy.ops.mesh.primitive_cube_add(size=2)bpy.context.object.name= "body"bpy.context.object.scale=(0.2,0.75,1)bpy.context.object.parent=c919bpy.context.object.rotation_euler [0]=-pi/4bpy.context.object.location=(0,5,1)bpy.context.object.parent=c919bpy.context.object.name="tail1 "bpy.ops.mesh.primitive_cube_add(size=2)bpy.context.object.scale=(1,0.5,0.25)bpy.context.object.location =(0,5,1)bpy.context.object.parent=c919bpy.context.object.name="tail2"bpy.ops.mesh.primitive_cube_add(
()bpy.ops.mesh.primitive_cube_add(size=1)bpy.context.object.scale[0]=3可以看到立方体在x方向缩放为原来三倍现在需要把横变成竖旋转尝试旋转此立方体选中立方体 ()bpy.ops.mesh.primitive_cube_add(size=1)bpy.context.object.scale[0]=3bpy.context.object.rotation_euler ()bpy.ops.mesh.primitive_cube_add(size=1)bpy.context.object.scale[0]=3bpy.context.object.rotation_euler [1]=1.5708bpy.ops.mesh.primitive_cube_add(size=1)bpy.context.object.scale[0]=3得到结果新形状如果想做下面这个造型该如何修改代码代码 (mat)bpy.ops.mesh.primitive_cube_add()finger2=bpy.context.objectfinger2.location=(0,-0.8,1.3,)finger2
y轴bpy.context.object.rotation_euler[1]=3.14/6猴子在绿轴方向上旋转60度歪头60度1号旋转轴为横滚轴bank负责歪头航向轴bpy.context.object.rotation_euler ()forxinrange(10):forzinrange(10):bpy.ops.mesh.primitive_monkey_add(size=1)bpy.context.object.location (size=1)bpy.context.object.location=(x,0,z)bpy.context.object.rotation_euler[1]=r-0.5效果这有什么意义吗? (mode='OBJECT')bpy.ops.object.select_all(action='SELECT')bpy.ops.object.delete()forblockinbpy.data.meshes (maple_mat)#---4.设置和动画化摄像机---bpy.ops.object.empty_add(type='SPHERE',location=(0,0,3))pivot=bpy.context.object
快捷键添加还是先清场景bpy.ops.object.select_all(action="SELECT")#选择所有物体bpy.ops.object.delete()#删除选定的物体光标放在Add上出现快捷键提示快捷键选中 清空将代码粘贴到游乐场全选删除bpy.ops.object.select_all(action="SELECT")bpy.ops.object.delete()清空场景中的对象bpy.ops.mesh.primitive_cube_add )bpy.data.objects["Cube"].rotation_euler=(0.2,0.4,0.6)bpy.data.objects["Cube"].scale=(1,2,3)设置成功观察属性这里面用到的 bpy什么意思? bpy里面有三个子模块opspathutils我们使用的是bpy.opsbpy.opshelp(bpy.ops)查看帮助ops里面存的工具可以用来进行各种操作operations所以叫ops再次尝试添加选中
(action="SELECT")bpy.ops.object.delete()#循环创建10x10的ico球体并赋予颜色材质foriinrange(10):forjinrange(10):#添加ico 球体,设置半径和位置bpy.ops.mesh.primitive_ico_sphere_add(radius=0.5,location=(i,j,0))#获取当前激活的小球对象icosphere=bpy.context.active_object 球体,设置半径和位置bpy.ops.mesh.primitive_ico_sphere_add(radius=0.5,location=(i,j,0))#获取当前激活的小球对象icosphere=bpy.context.active_object bpy.ops.object.select_all(action="SELECT")bpy.ops.object.delete()#循环创建10x10的ico球体并赋予颜色材质foriinrange(10 获取当前激活的小球对象icosphere=bpy.context.active_object#新建材质数据,命名为mat_i_jmat_name=f"mat_{i}_{j}"mat=bpy.data.materials.new
(size=2,enter_editmode=False,location=(0,0,0))bpy.context.object.scale[0]=3bpy.ops.mesh.primitive_cube_add (size=2,enter_editmode=False,location=(0,0,0))bpy.context.object.scale[0]=3bpy.context.object.rotation_euler [0]=3bpy.context.object.rotation_euler[1]=math.pi/4bpy.ops.mesh.primitive_cube_add(size=2,enter_editmode =False,location=(0,0,0))bpy.context.object.scale[0]=3bpy.context.object.rotation_euler[1]=math.pi/4*3 =(0,0,0))bpy.context.object.scale[0]=3bpy.context.object.parent=empty_objbpy.context.object.name="elder_brother"bpy.ops.mesh.primitive_cube_add
尝试importbpybpy.ops.object.select_all(action="SELECT")bpy.ops.object.delete()fornuminrange(13):bpy.ops.mesh.primitive_cube_add (size=1)bpy.context.object.location=(0,num,0)bpy.context.object.scale=(30,1,num+1)每个都长出一块但是底边不齐要把阶梯沿着 z轴移动阶梯importbpybpy.ops.object.select_all(action="SELECT")bpy.ops.object.delete()fornuminrange(13):bpy.ops.mesh.primitive_cube_add (size=1)bpy.context.object.location=(0,num,num/2)bpy.context.object.scale=(30,1,num+1)因为当前视角结果会看不完整如何看到完整阶梯呢 ()fornuminrange(10):r=random.random()bpy.ops.mesh.primitive_cube_add(size=1)bpy.context.object.location
)bpy.ops.object.delete()bpy.ops.mesh.primitive_monkey_add()回车运行清空场景添加猴子可以把程序写到一个文件里面吗? ="SELECT")bpy.ops.object.delete()bpy.ops.mesh.primitive_monkey_add()bpy.data.objects["Suzanne"].location =(1,2,3)bpy.data.objects["Suzanne"].rotation_euler=(0.2,0.4,0.6)bpy.data.objects["Suzanne"].scale=(1,1,1.5 (action="SELECT")bpy.ops.object.delete()bpy.ops.mesh.primitive_cube_add(location=(0,0,0))bpy.ops.mesh.primitive_cube_add (action="SELECT")bpy.ops.object.delete()fornuminrange(13):bpy.ops.mesh.primitive_cube_add(size=1)bpy.context.object.location
是一个三维向量3d-vector尝试访问按方向键⬆️重复上一次的命令添加索引[0]访问向量的第0个元素继续按方向键⬆️重复上一次的命令添加=2尝试设置向量的第0个分量观察bpy.data.objects location.x都会+1在3d视图面板可以观察到立方体的移动设置其他位置分量bpy.data.objects["Cube"].location[1]+=3尝试改变y坐标的位置bpy.data.objects ["Cube"].location[2]+=-2尝试改变z坐标的位置bpy.data.objects["Cube"].location再次观察立方体的位置观察属性调板尝试改变旋转bpy.data.objects [2]后面加了_euler尝试改变旋转尝试修改物体的旋转属性bpy.data.objects["Cube"].rotation_euler[0]+=0.3bpy.data.objects["Cube"] bpy.data.objects["Cube"].scale[0]=1bpy.data.objects["Cube"].scale[1]=2bpy.data.objects["Cube"].scale[
清空文件_网格_mesh_材质_material开始配套视频上次我们制作了渐变颜色的球随机颜色的球importbpyformaterialinbpy.data.materials:bpy.data.materials.remove 删除材质删材质importbpyformaterialinbpy.data.materials:bpy.data.materials.remove(material)全部材质消失照这个方式删除对象对象新建文件 材质像删除材质一样删除所有对象importbpyforobjinbpy.data.objects:bpy.data.objects.remove(obj)删除后文件中再无Object这和原来的清场有区别吗 原来的清场清场全选删除对象importbpybpy.ops.object.select_all(action="SELECT")bpy.ops.object.delete()前提是选中对象如果对象不在当前场景或者不在当前帧上就无法选中也就无法删除还有个弊端问题删除场景之后再新建一个 叫做Cube.001在Mesh中有两个MeshMesh也就是说之前只删除了对象没有删除对象中的网格想要删除网格拖动过去可以把网格都删除importbpyformeshinbpy.data.meshes:bpy.data.meshes.remove
bpy.data.objectsobjects里面有3个对象哪3个呢? 观察信息跳板最底下确实出现了一条新命令信息调版中复制命令去游乐场试试命令是否好使先取消选择找到3d视图菜单选择select都不选None3d视图和场景视图中Light对象都取消高亮准备再执行选择全部语句游乐场在游乐场中粘贴代码回车执行#选择所有物体bpy.ops.object.select_all (action="SELECT")然后准备删除选中的对象删除持续按⬆️键bpy.ops.object.delete()#删除选定的物体执行之后删除了三个对象再来一次从头开始新建文件对当前项目不保存Don'tsave 使用代码bpy.ops.object.select_all(action="SELECT")#选择所有物体bpy.ops.object.delete()#删除选定的物体粘贴代码到游乐场并执行一次性删除3
2.3.2 代码示例 python # 使用Blender Python API进行GPU渲染 import bpy # 切换Cycles渲染引擎 bpy.context.scene.render.engine = 'CYCLES' # 创建材质球 mat = bpy.data.materials.new(name="Material") mat.use_nodes = True bsdf = mat.node_tree.nodes ["Principled BSDF"] # UV球体对象 bpy.ops.mesh.primitive_uv_sphere_add() obj = bpy.context.active_object obj.data.materials.append(mat) # 设置渲染参数 bpy.context.scene.cycles.device = 'GPU' bpy.data.scenes['Scene '].render.tile_x = 512 bpy.data.scenes['Scene'].render.tile_y = 512 # GPU运算渲染 bpy.ops.render.render(
渲染引擎配置在 Render Properties 面板选择 Cycles 渲染器,开启GPU加速:import bpy bpy.context.preferences.addons['cycles'] .preferences.compute_device_type = 'CUDA' bpy.context.scene.cycles.device = 'GPU'五、功能验证测试1:基础建模新建立方体:
比如用Blender建一个城堡场景: # 伪代码:简化版Blender模型导出流程 import bpy # 创建基础地形 terrain = bpy.ops.mesh.primitive_plane_add (size=100) # 添加纹理和光照 bpy.data.materials["Ground"].node_tree.nodes["Principled BSDF"].inputs["Base Color "].default_value = (0.3, 0.2, 0.1, 1) bpy.data.lights["Sun"].energy = 500 关键点:VR建模必须“抠细节”——墙角的花纹、光影的渐变