1 初识Blender
今天在看代码时发现了一个新的工具:Blender,一款专业、开源的三维计算机图形软件。以下介绍摘自维基百科,刚接触,不太懂:
Blender可以运行于不同的平台,而且安装后占很少空间。虽然它经常不支持说明文档或示例发布,但其拥有极丰富的功能,而且绝大部分是高端模块塑造软件。
- 支持不同的几何图元,包括多边形网纹,快速表层塑模,曲线及向量字符。
- 内置cycle光线追踪渲染引擎,可提供真实的画面
- 同时也有eevee实时渲染引擎(类似游戏引擎),可即时提供极佳的预览画面
- 动画工具,包括了反向动作组件,可设置骨干,结构变形,关键帧,时间线,非线性动画,系统规定参数,顶点量重及柔化动量组件,包括网孔碰撞侦察和一个具有侦察碰撞的粒子系统。
- 使用Python语言来创作及制作游戏及工作自动化脚本。
- 基本的非线性影像编辑及制作功能。
2 安装
Ubuntu不建议用apt-get安装,版本老且有很多问题。
直接到Blender官网下载压缩包,解压到/usr/local
或者任何地方,直接就可以通过里面的可执行文件启动blender,详情见安装教程。
多加一步,建立软链接:
ln -s /usr/local/Blender/blender /usr/bin
然后就可以在终端通过blender
启动了。
UI界面的布局层次:Screens - Areas - Regions
- Screens: Layout, Modeling, Sculpting, Shading, Scripting, ...
- Areas: PROPERTIES, OUTLINER, INFO, TEXT_EDITOR, VIEW_3D, CONSOLE, ...
- Regions: TOOL_HEADER, HEADER, TOOLS, WINDOW, ...
3 基本操作
G, X/Y/Z
移动R, X/Y/Z
旋转S, X/Y/Z
缩放Shift-D
复制。与Ctrl-C
的区别是不会新增材质。A
选中全部- 直接通过“选中物体, Delete”不会删除材质,通过“文件, 清理数据块”可以删除未使用的数据块;
- 选中物体,编辑模式/物体模式
4 材质
新建材质 --> 使用节点 --> 添加需要的节点构建所需材质
slot(材质槽)
一个物体可以通过拥有多个材质槽,从而对一个物体不同部分应用不同的材质。
例如:在shading界面,选中物体,在下方选择新建或者新建材质槽,然后令物体进入编辑模式,选中一个面,然后在下方选择一个预设的材质槽,选择指定,即可为一个特定的面制定材质。
材质随动画渐变
为物体添加“混合着色器”,然后添加两种材质的着色器作为其输入,在动画中通过控制参数实现两种材质间的转换。
5 UV编辑
首先为物体的材质设置图像纹理,并设置纹理图像;
进入UV editing界面,在 VIEW_3D 区域中点击 UV 按钮选择展开方式。
6 渲染
命令行渲染
某些情况下我们想要提高渲染速度、远程访问Blender进行渲染或通过命令行编写脚本。
使用命令行的一个好处就是我们并不需要图形界面进行显示(比如不需要Linux的X server),因此可以通过远程shell进行渲染(典型的比如SSH)。
命令行渲染
命令行渲染只支持CYCLES引擎!!! 用Eevee渲染出错
单张图像
blender -b file.blend -f 10
-b 后台渲染(没有用户界面)。
file.blend 用于渲染的blend文件路径。
-f 10 只渲染第10帧。
blender -b file.blend -o /project/renders/frame_##### -F OPEN_EXR -f -2
-o /project/renders/frame_##### 保存渲染图像的路径,使用五个0补位用于帧计数。
-F OPEN_EXR 覆盖blend文件中指明的图像保存格式,并保存为一张OpenEXR图像。
-f -2 仅渲染倒数第二帧。
动画
blender -b file.blend -a
-a 使用blend文件中保存的设置渲染整个动画。
blender -b file.blend -E CYCLES -s 10 -e 500 -t 2 -a
-E CYCLES 使用“Cycles Render”渲染引擎。执行 blender -E help 查看可用渲染引擎列表。
-s 10 -e 500 将起始帧设为 10 结束帧设为 500。
-t 2 仅使用两个线程。
注意
始终 将 -f
或 -a
放在最后一个参数的位置上。
Cycles选项
blender -b file.blend -f 20 -- --cycles-device CPU
--cycles-device CPU
Override the device that is used to render frames. Currently supported options are CPU, CUDA, OPTIX and OPENCL. Additionally, you can use CUDA+CPU or OPENCL+CPU in order to use both CPU and GPU rendering.
--cycles-print-stats
Show detailed statistics about memory and time usage for Cycles renders on the console.
不同于其它选项,Cycles的选项放在命令最后,用--
隔开
经验
实测用CUDA和CPU对速度影响不大,但是线程数极大影响速度。
7 Python API
- Scripting 界面有个 INFO 区域,当用户在图形界面上进行操作时,这里会显示对应的 python 命令,可以作为写脚本的参考,有时候可以直接复制使用;
- 建议在偏好设置中开启 'Python工具提示',这样当鼠标移动到对应的按钮时,可以显示对应的 python 对象,极大方便脚本编写;
bpy.data
访问blender中的数据,如bpy.data.objects/materials/images/...
可以访问或者修改数据的属性;
可以创建/删除数据;
bpy.context
不同于bpy.data通过列表来直接访问所有对象,bpy.context通过上下文来确定对象,如bpy.context.object/selected_objects/active_object/...
通过context访问对象是只读的;
通过context能过访问的对象取决于在blender中访问的区域;
bpy.ops
依赖于context来确定操作对象,所以首先要确定context正确性。
bpy.ops中的operator通过关键字参数指定相应操作的属性,除此之外,还有三个可选的位置参数:
bpy.ops.test.operator(override_context, execution_context, undo)
override_context - dict type.
execution_context - str (enum).
undo - bool type.
当前context不符合ops的要求时,可以通过覆写override_context参数来改变ops生效的context;
例如:
# remove all objects in scene rather than the selected ones
import bpy
override = bpy.context.copy()
override['selected_objects'] = list(bpy.context.scene.objects)
bpy.ops.object.delete(override)
其他技巧
节约内存开销
- 材质重复使用
重复的物体使用同一材质,不要每个物体都拥有独占材质。
使用Shift-D代替Ctrl-C。 - 实例化
一个复杂的物体集合可以通过实例化节约内存。