Blender教程

二.制作环境

上一节给积木添加了刚体属性,但是单击播放按钮后,积木一直往下坠。这是因为场景是空的,没有地面能够接住积木。所以需要制作一个环境出来,用来与积木模型交互。

为了不影响建模,可以先把积木隐藏。单击大纲视图中积木中级版右侧的眼睛图即可在视图中隐藏积木,操作如图 3-177 所示。图标 代表隐藏,再次单击即可显示。

image.png

图 3-177 在视图中隐藏积木


image.png

首先添加一个平面并进入编辑模式,切换到边选择模式;然后选择一条边,按 E 键向上挤出;最后给转折处添加一个段数较高的倒角,让过渡比较自然。操作过程如图 3-178 至图 3-180 所示。记得开启平滑着色和自动光滑,模型如图 3-181 所示。

image.png


image.png

因为新建的平面是正方形的,所以经过挤出倒角之后,模型看起来很窄,这时候就可以用缩放工具把模型变得宽一点。首先选中模型并进入编辑模式 ,然后按 A 键选中全部的面,单击缩放工具,按住绿色的小立方体不放左右拖动即可让模型沿着 y 轴缩放(需要从哪个方向缩放就选择相应的轴向,不一定是 y 轴),操作过程如图 3-182 所示。把环境模型缩放到较宽,这样就可以放更多的积木。

image.png


这时候在大纲视图中把积木模型的视图显示 打开,可以发现环境模型特别小,而积木显得很大,这显然是不合理的。选中环境模型并进入编辑模式,全选,然后使用缩放工具 ,把鼠标指针放在白色圆圈处,按住鼠标左键不放,向右拖动即可整体放大模型,向左拖动是缩小,操作过程如图 3-183 所示。使用移动工具和缩放工具调整积木的大小和位置,直到场景的比例比较和谐,如图 3-184 所示。 积木需要放高一点,与地面要有一定的距离才能够往下坠落

image.png


image.png

环境模型制作好后,回到起始帧再次单击播放按钮会发现,积木直接穿过模型,还是往下掉了。这是因为环境并没有添加物理属性,所以它不会被 Blender 计算。如果不需要添加物理属性,就可以加入计算,那么当场景中有上百个模型时,计算机可能会卡顿,所以只给需要进行计算的物体添加物理属性。
选中环境模型,在物理属性 栏中单击“刚体”按钮 ,回到起始帧再次单击播放按钮 ,会发现积木跟环境一起往下坠落了,要想环境模型不往下坠落,就需要
单击展开刚体类型的下拉列表,选择“被动” ,操作过程如图 3-185 所示。再次单击播放按钮,环境模型就不会往下坠落了。刚体类型为“被动”时模型就会保持静止,但还是会与活动项的刚体产生碰撞。“被动”一般用于墙壁之类的稳定的物体。

image.png

图 3-185 设置刚体类型为被动


小技巧:批量添加刚体属性

当有多个物体的时候,逐个添加刚体属性就非常麻烦,想要统一添加可以先选择多个物体,然后执行物体 > 刚体 > 添加活动项或添加被动项命令。


image.png

这就结束了吗?虽然现在环境模型没有往下坠落,但是积木模型却被弹开了,如图 3-186 所示。接下来先在大纲视图中把环境模型重命名为“环境”, 再单击“刚体”按钮来移除环境模型的刚体属性,最后把环境模型隐藏, 操作过程如图 3-187 所示。

image.png


新建一个平面,设置较大的尺寸,然后给平面添加被动类型的刚体,如图 3-188 所示。此时播放会发现积木自然地落在了平面上,如图 3-189 所示。

image.png


image.png

这里涉及一个重要的概念“碰撞形状”。现实中一个物体是什么形状就会有什么样的表现,例如球掉在地上会滚动,饭可以被放在碗里面等。而三维建模中物体的形状跟实际碰撞的形状是可以不同的,一个立方体也可以像球一样滚动,饭不一定能被放进碗里,这都是通过修改碰撞的形状去实现的,而默认的碰撞形状是凸壳。
接下来先把平面删除,
恢复显示环境模型,选中环境模型,进入编辑模式,执行网格 > 凸壳命令,即可得到环境凸壳后的模型,如图 3-190 所示。可以看到凸壳的环境模型是封闭的且侧面是三角形,这也就是为什么积木会被弹开,因为环境模型的碰撞形状并不是肉眼所看到的那样,这里只需要把碰撞形状改成网格即可解决问题。首先执行编辑 > 撤销历史命令,然后找到凸壳,单击凸壳的上一步操作(凸壳的上一步操作是什么并不重要),即可回到执行凸壳命令之前的状态。这就像让时间倒流一样,操作过程如图 3-191 所示。

image.png

确保环境模型处于被选中的状态, 添加被动类型的刚体,展开“刚体”,展开“碰撞”,单击“凸壳”,然后单击“网格”,操作过程如图 3-192 所示。这样就把环境模型的碰撞形状改成了网格,也就是肉眼可见的模型本身的形状。回到起始帧再次单击播放按钮,积木终于可以平稳落地,如图 3-193 所示。

image.png


知识点:凸壳(Convex Hull)

凸壳是一个几何学概念。用通俗的话说,就是创建一个能够包裹住模型所有点的几何体。这就像是给一个物体裹上一块没有缝隙的、完整的布,这块布能够包裹住这个物体的边边角角,并且是拉直状态,没有凹陷进去的地方,如图 3-194所示(右)。
将凸壳作为碰撞形状是为了减少计算量,因为模型过于复杂是很难计算碰撞的结果的,而凸壳的形状就相对简单,但是准确度也有所下降。游戏中会用更简单的几何体去碰撞,所以会出现“穿模”等情况。计算机想要模拟现实中复杂的碰撞效果是很难的,凸壳就可以很好地平衡计算时间和效果,但如果遇到背景模型这样的形状就容易引起一些问题。
image.png


image.png

场景中只有一个积木,比较单调。接下来用 3.3.1 小节步骤 01 的方法把其他类型的积木也导入进来,如图 3-195 所示,然后给新导入的积木都添加上刚体。
现在每种积木都只有一个,坠落下来效果还是不够好,所以需要多复制几个出来,让场景更加丰富。
首先一定要确保当前位于起始帧,选中要复制的物体,执行物体 > 关联复制命令,拖动鼠标放置复制出来的物体,单击完成复制,操作过程如图 3-196
所示。这里使用关联复制主要是为了节约内存,以避免内存占用太高。
使用关联复制把每种积木都单独复制几个出来,再
移动旋转积木,让积木错落摆放,推荐切换到四格视图完成这一步,摆放完后的效果如图 3-197 所示。 一定要在起始帧的状态下操作! 积木之间一定不能有穿插的部分,所有积木必须分离开
在物体模式选中多个物体的情况下,按住 Shift 键单击物体会把物体设置为激活状态,再次单击物体可退出激活状态。

image.png


image.png

在起始帧单击播放按钮,可以看到积木下坠之后很容易翻过来,效果还不是很理想,这个问题可以通过更改刚体的设置解决。选中一个积木,单击“物理属性”按钮,展开刚体 > 设置,可以看到有一个“质量”参数,它代表了模型的质量,质量越大模型越稳定,越小就越不稳定。现实中质量和体积、密度、材质等因素有关,三维建模中是可以随意设置的。当前质量是默认的1kg,单个圆柱模型的高 2m(前提是完全按照本书流程制作),对于一个 2m 高的物体,1kg 显然太轻了,具体设置多少合适呢?
这里可以直接使用 Blender 提供的计算质量的功能,按 A 键选中全部模型,执行物体 > 刚体 > 计算质量 > 塑性命令,即可根
据尺寸等信息把积木当作塑料计算出质量,操作过程如图 3-198 所示。再次回到起始帧,单击播放按钮,可以看到积木的下坠
更加自然和真实了。反复调整积木的数量、位置、旋转,直到获得满意的效果,最终效果如图 3-199 所示。

image.png


单击播放按钮模拟计算后,时间线下部会有一个橙色区域,这代表这段时间是有物理模拟的缓存的,按住时间针拖动可以定位到不同的帧,如图 3-200 所示。没有橙色缓存区域的地方不会有下坠的动画,如果刚播放 1 帧就暂停,就只有 1 帧的缓存。
建议播放完全部的动画,然后在时间线中找到效果比较好的一帧,把时间针就停留在那一帧,方便之后的工作。

image.png

图 3-200 时间针


知识点:帧

帧是影视、动画创作中非常重要的一个基础概念。一个帧就是连续的画面中的一个画面,一个视频就是由很多张连续的图片所构成的。图 3-201 所示为 Eadweard Muybridge 在 1878 年拍摄的一组照片,这组照片记录了马的运动过程。试着从第一张开始快速移动眼睛,一直看到最后一张,是否觉得马跑动起来了呢?这就是视频的原理,视频利用的就是人眼的视觉残留效应,当看第二张图片的时候,第一张“还在眼球里”,以此类推,就会让人有一种动态的错觉。

早期的电影一般是 24 帧 / 秒(也就是一秒钟内连续播放 24 幅图像),动画片一般是 25帧 / 秒,而现在的游戏一般在 60 帧 / 秒以上。帧速率越高动态也就越自然。Blender 中默认的常规文件一共是 250 帧,即 Blender 只会渲染250 幅图像,具体要变成多少帧 / 秒的视频取决于视频输出的设置。
还有一个重要的相关概念“关键帧”,后文会单独介绍。

image.png

图 3-201 运动中的马

容易出现的问题:

1.积木会被弹开。

解决方法:检查环境模型是否设置为了网格,积木之间是否有穿插的部分。

2. 有的积木没有下坠。
解决方法:可能在复制的时候使用的是普通复制,此外可以检查是否对积木添加了刚体。


image.png

如果重新打开软件发现积木又回到了原来的位置,只有回到初始帧单击播放按钮,重新计算一遍才能看到积木坠落。这是因为整个模拟计算的结果并没有保存下来,关闭软件后就被删除了,想要保存模拟的结果需要用到缓存的功能。单击“场景属性”按钮 ,展开“刚体世界环境”,展开“缓存”,单击“烘焙所有动力学解算结果”按钮,等待片刻即可完成烘焙,操作过程如图 3-202 所示。系统默认会烘焙全部的帧,如果不需要烘焙太多帧,可以设置“结束点”参数,例如设置成 50,则只会烘焙前 50 帧,如图 3-202 中绿色框所示。 (此步骤容易导致软件崩溃,建议使用稳定版 Blender。)
烘焙是三维软件中常见的术语。烘焙很好理解,面包是由面团烘焙成的,面团可以随便揉捏,但是烘焙成面包之后就无法改变了,就跟生米煮成熟饭一样。这里的烘焙动力学指的是,把场景中所有动力学内容(包括物理模拟)都变成结果保存下来,这样的话再次播放,Blender 就不会进行物理模拟的计算,而是直接播放缓存的结果,就像播放视频一样,并且时间线上缓存条的颜色也会变深,如图 3-203 所示。这个时候即便更改物理属性也不会影响到场景中的结果,还是一样会播放缓存的结果,如果要清除缓存需要单击“清除所有烘焙”按钮,如果还不能彻底清除,则需要重启 Blender。

image.png