Blender教程

图 6-125 所示为本节的目标成果。本节案例使用 Blender 内置的 Cell Fracture 插件制作一个简单的破碎效果动画。
image.png

一.破碎基础

Blender 三维建模中的物体可以被打碎,这类把物体打碎的操作叫作“破碎”(Fracture),破碎一般用于制作特效,例如电影中的大楼爆破、子弹打碎物体等效果,都需要使用到破碎。与现实世界不同的是,三维建模中物体是提前破碎好,如图 6-126 所示,然后再伪装出受到碰撞才分裂开来的假象,如图 6-127 所示。因为三维建模中不存在真正的力,目前还无法实现真的受到撞击自然地破碎开,只能提前根据设定好的撞击情况破碎。接下来试着用 Blender 制作一个简单的破碎效果。

image.png


1. 球体破碎:Blender 本身没有破碎功能,需要启用内置的 Cell Fracture 插件,如图 6-128 所示;添加一个球体,执行物体 > 快速效果 >Cell Fracture 命令,如图 6-129 所示,会弹出 Cell Fracture 的面板,所有参数保持默认设置,单击“确定”按钮即可,如图 6-130 所示。

image.png


2. 添加刚体:经过一段时间后,Cell Fracture 就会把一个球体破碎成非常多的碎块,每一个碎块是一个单独的物体。由于原本的球体也在,所以完整的球体和破碎的球体是重叠在一起的,可以把原本的球体隐藏,如图 6-131 所示(目前插件还无法做到无缝破碎,所以破碎后的物体之间会有缝隙)。此时播放动画碎块没有任何反应,还需要选中所有的碎块并添加刚体活动项,如图 6-132 所示。然后在球体下方添加一个平面作为地面,并将其作为被动刚体,再播放动画,球体碎块就会坠落到地面上了,如图 6-133 所示。

image.png

至此一个非常简单的破碎特效就制作好了。接下来制作一个更加完整的动画,笔者构想的主题是:与现实相反的物理现象。首先想到的就是把一个摔碎的物体表现成另一个物体,由此想到了易碎的鸡蛋,最终想到的是让鸡蛋像水泥一样摔碎,将里面的蛋黄做成一个金属的球体。想法有了,接下来正式开始制作。


二.个性化破碎
破碎一般是在物体表面随机确定一些点,根据这些点进行破碎。现实中不同材料会有不同的破碎效果,所以有时候需要手动定义物体的破碎方式,可以根据物体材料的特性进行破碎,也可以根据动画需求进行破碎。本节案例需要根据鸡蛋的撞击角度和接触面进行个性化破碎。


1. 鸡蛋模型:可以导入笔者提供的“鸡蛋模型”文件夹中的 OBJ 文件,或者直接使用导入了模型的 Egg-model.blend文件。鸡蛋模型本身是实心的,笔者把中间用布尔挖空,并且放了一个蛋黄,如图 6-134 所示。设定是鸡蛋破碎后,中间的球体就会掉出来。

image.png

2. 标注工具:鸡蛋坠落时底部会接触地面,然后破碎,所以破碎点在底部。首先把视角切换到鸡蛋底部,选择标注工具 ,在侧边栏的“工具”中把“放置”改为“ 表(曲)面”,然后就可以在模型上画线了。以鸡蛋的撞击点为中心,按照想要破碎的形状绘制一些线,如图 6-135 所示。

image.png


知识点:标注工具 (Annotation Tool)
标注的作用相当于做笔记时画的下画线之类的记号。在大部分情况下按住 D 键即可直接使用标注工具,按住 D 键后按住鼠标左键绘制,单击鼠标右键擦除。标注工具在 Blender 中本来用于打草稿和画注释,但在其他的功能中有时候也会用于辅助,例如可以用来绘制 Cell Fracture 破碎的参考线。在 Blender 中,标注工具经常能起到意想不到的作用,是 Blender 的特色工具之一。


3. Cell Fracture:破碎之前先给鸡蛋再添加一种材质, 确保鸡蛋有两种材质,如图 6-136 所示。然后执行 Cell Fracture 命令,参数如图 6-137 所示,最重要的是“点源”选择 Annotation Pencil,即标注工具。最后单击“确定”按钮,鸡蛋就会根
绘制的标注破碎,如图 6-138 所示。


4. 添加刚体:把绘制的标注擦除,隐藏原本的鸡蛋模型,把所有的碎块选中(确保有活动物体),执行物体 > 刚体 > 添加活动项命令,将所有碎块添加为刚体,如图 6-139 所示;添加一个地面,把鸡蛋移动到高处或者将地面往下移动,拉开距离,然后将地面添加为刚体被动项,如图 6-140 所示。


三.连接刚体
当前播放动画鸡蛋会“粉身碎骨”,但实际上,根据撞击的力度和角度的不同,破碎的状况也不同,有时候只是破碎成一些小碎块,不会整个都粉碎。在三维软件中物体已经提前粉碎好了,所以要靠“连接”把粉碎的物体连接起来,对需要破碎的物体单独设置。


1. 分组管理:把碎块分为大、小两组,手动选择大块的碎块,按 M 键,新建一个 Big 集合,把大碎块添加进去,如图 6-141 所示;选择其余的小碎块,新建 Small 集合并添加进去,集合整理后如图 6-142 所示,把碎块分组方便让破碎时不同大小的碎块有不同的表现; 选中所有的碎块,在“刚体”菜单中单击“计算质量”,选择“混凝土”,即可根据碎块大小计算并设置质量,如图 6-143 所示。不同质量在刚体模拟时会有不同的表现,效果会显得更加真实。

image.png


2. 连接碎块:隐藏 Small 集合,单独处理 Big 集合,选中所有大碎块,在“刚体”菜单中单击“连接”,即可在每两个碎块之间创建一个空物体进行连接,如图 6-144 所示;给 Small 集合中的所有小碎块同样添加连接,此时所有碎块就像被胶水粘住一样,坠落时也不会分开。实际上空物体是添加了固定类型的刚体约束,用于把物体参数中的两个物体连接起来,如图 6-145 所示。

image.png


3. 断开连接:把碎块连接起来的目的是希望碎块撞击到地面之后才裂开,而不是在空中就分开,只需要设置连接用的空物体即可做到。选中所有的空物体,在刚体约束设置中, 按住 Alt 键,然后勾选“可断”,再放开 Alt 键,即可给所有的空物体同时设置参数,如图 6-146 所示。 确保所有的空物体都勾选了“可断” ,可断的默认“阈值”是“10”,代表打破连接所需要的力量,阈值越高,连接越紧密。

image.png


4. 设置阈值:大碎块由于质量大,自然是需要大阈值去打破连接的,小碎块则相反。首先可以把连接大碎块的空物体分成一组,小碎块的分成一组,然后选择大碎块的空物体, 按住 Alt 键,设置“阈值”为 500, 再按 Enter 键,即可同时给所有的空物体设置阈值,如图 6-147 所示。小碎块的空物体的阈值保持默认的 10 即可。此时再播放动画,部分特别大的碎块就不会碎裂了,如图 6-148 所示。比起一落地就全都碎了,现在的破碎动画更加自然。

image.png


5. 遮盖缝隙:因为模型是提前破碎好的,所以碎块之间有缝隙,解决这一问题最简单的方法是使用原本的模型覆盖碎块。首先恢复原本鸡蛋模型的显示,切换到材质预览模式即可看到差别,如图 6-149 所示,如果还不能覆盖住缝隙可以把原本的模型略微放大一点。然后给鸡蛋模型设置刚体,鸡蛋会跟碎块发生碰撞,由于重叠在一起,会爆炸开,所以需要给鸡蛋单独设置碰撞集合,如图 6-150 所示。一个方块代表一个集合,此集合并非大纲视图中的场景集合,而是专门给碰撞用的集合。碎块在第一个碰撞集合中,鸡蛋在第二个中。再播放动画,它们之间就不会相互碰撞了,且不会影响刚体效果。

image.png


四.动画完善

1. 隐藏完整鸡蛋:因为鸡蛋模型在第二个碰撞集合中,播放动画时会穿过地面,所以需要让鸡蛋在碰到地面的一瞬间消失,只需要给“可见性”参数打上关键帧即可。首先播放动画,得知第 26 帧的时候鸡蛋碰到地面;然后选中鸡蛋模型,在物体属性中给视图和渲染都打上关键帧,第 25 帧时全都显示打一个关键帧,第 26 帧时全都隐藏再打一个关键帧,即可让鸡蛋在第26 帧瞬间隐藏,如图 6-151 所示。


2. 蛋黄动画:蛋黄模型在鸡蛋内部,加上刚体后容易出现爆开的现象,一播放动画就飞走,其中一个原因是碎块的刚体形状是“凸壳”,所以容易触碰到蛋黄,把蛋黄弹开。最简单的解决办法是让鸡蛋不跟碎块碰撞,直到落地,所以需要给碰撞集合打上关键帧,在碰撞集合的格子上右击即可打上关键帧。关键帧如图 6-152 所示,第 27 帧蛋黄在第三个碰撞集合,不与任何物体碰撞;第 28 帧蛋黄在第一个碰撞集合,就可以与碎块碰撞了。

image.png


3. 碗和烘焙:鸡蛋落在碗里会显得更自然。接下来制作一个简单的碗,或者使用本节提供的模型“碗 .obj”。导入模型后,将其摆放在地面上,并且添加刚体被动项,地面可以放大一些, 碗的碰撞形状一定要设置为网格,然后回到第一帧播放动画即可让鸡蛋摔在碗里,如图 6-153 所示。如果鸡蛋还是摔在地上,可能是因为有缓存,可以尝试重启 Blender。

image.png


确定动画没问题后就可以缓存动画了。首先到场景属性中找到刚体世界环境,设置“模拟起始帧”和“结束点”,把“每帧子步数”和“解算器迭代次数”均改为 30(可选,这两个参数值越高解算越精确,时间也越久),然后单击“烘焙所有动力学解算结果”按钮即可,如图 6-154 所示,这样就一键烘焙了整个场景中的所有刚体动画。

image.png


五.材质和渲染

1. 基础材质:地面使用本节提供的 concrete_floor_worn_001_4k 文件夹中的水泥材质即可,如图 6-155 所示。可以直接从其中的 .blend 文件中把球体复制过来,如图 6-156所示,以获得制作好的水泥材质。鸡蛋外壳使用本节案例提供的贴图即可,鸡蛋内部和蛋黄(对蛋黄可以添加表面细分修改器)可以设置成基础的金属材质,基础色为 959595,如图 6-157 所示。金属材质坚硬,跟脆弱的鸡蛋壳形成对比,反差更强。为碗新建一种白色(Hex:FFFFFF)材质即可,“糙度”设置为 0.1,让碗看起来光滑一点。

image.png

image.png


2. 灯光和构图:将渲染引擎改为 Cycles,然后切换到渲染模式。至于灯光,使用本节提供的 brown_photostudio_02_4k.exr.001 贴图作为世界环境即可,如图 6-158 所示,这是一张室内的环境贴图,非常贴合有鸡蛋和碗的场景。新建一个摄像机,将“焦距”设置为 200mm(长焦距),找一个尽量能看到整个动画破碎过程的角度,尽可能避免画面中全是大碎块。然后勾选“景深”,“距离”调整到中间清晰即可。接着将“光圈级数”改为 0.1,有了景深真实感更强。最终构图和摄像机参数如图 6-159 所示。

image.png

image.png



3. 渲染设置:把输出“分辨率 X”“Y”均改为 1080px,修改“结束点”到 100,设置输出路径,如图 6-160 所示;然后到渲染设置中把渲染时间限制改为 1min,勾选“降噪”,再勾选“运动模糊”,将“位置”改为“此帧结束”,如图 6-161所示。这样模型在运动时就会有拖影的效果出现,就跟现实中用设备拍摄运动物体时一样,更加真实。因为运动模糊容易出现噪点,所以勾选“降噪”效果会更好。最后渲染 PNG 序列即可。

image.png


知识点:动态模糊(Motion Blur)
Blender 默认渲染的动画其实就是一张一张的图片,每张图片都是清晰的,这是很奇怪的,因为现实中拍摄视频,如果逐帧看会发现物体在运动过程中一定是模糊的,这就叫作运动模糊,也叫作动态模糊。有的三维动画看起来很假的一大原因就是没添加运动模糊。游戏也是如此,多数游戏没有或者默认不开启动态模糊,在每一帧清晰的情况下看起来就觉得假,所以一般建议开启运动模糊,尤其是制作刚体模拟动画时。Blender 的运动模糊中有个“快门”参数,此数值越大越模糊,越小越清晰,制作过程中需要根据需求合理调节运动模糊的参数。


4. 配音和输出:鸡蛋和金属都是常见物体,完全可以自己配音。首先用手机录制一个鸡蛋掉到碗里的声音,然后录制一个把金属物体丢进碗里的声音,用来模拟碎块碰撞碗的音效,然后录制一些小碎块掉在地面上的声音,把录制好的音效发送到计算机上即可。更详细的配音过程可以参看本节配套的视频教程,也可以直接使用笔者提供的音效。
最后新建 Video Editing 文件,添加渲染好的序列和音效,反复播放,调整音效的位置,设置好相应的分辨率、帧率(25fps)、输出路径和文件格式,输出 MP4 格式的文件即可,如图 6-162 所示。

image.png



本章总结

动画的关键在于“动”,物体动、灯光动、摄像机动,甚至材质动,通过不同的东西动可以制作出各种不同的动画。不同于渲染静态图,动画的重点在于整个动画的连贯性,而不是把每一帧都要做到无比细致。本章只是通过案例介绍了 Blender基本的动画功能,实际上动画的知识点和操作远不止这些,对每一种动画都可以深入研究。