zoukankan      html  css  js  c++  java
  • 探索Blender

    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。
    • 实例化
      一个复杂的物体集合可以通过实例化节约内存。
  • 相关阅读:
    echarts —— 绘制横向柱状图(圆角、无坐标轴)
    浅析微信支付:(余额提现)企业付款到微信用户零钱或银行卡账户
    浅析微信支付:支付验收示例和验收指引
    浅析微信支付:如何使用沙箱环境测试
    linux内存源码分析
    linux内存源码分析
    linux内存管理源码分析
    linux源码分析
    移植python笔记
    linux中断源码分析
  • 原文地址:https://www.cnblogs.com/tofengz/p/13399797.html
Copyright © 2011-2022 走看看