1 倒塌无所不在

  倒塌破碎是刚体动力学的另一个重要领域。在今天的VFX行业中被广为使用。就连Next Limit公司为Realflow做的Demo中也一直留有崩塌破碎效果。

  当我们谈论倒塌时,一定要记着,只有存在某种不稳定的因素才能使稳定结构(结构,可以指一栋建筑,一堆积木,一座大桥等等)崩溃。这种不稳定是由外力作用在一个或多个物体上。换句话说:要产生倒塌效果,我们必须做一些事使结构不稳定。如果你玩过积木,一定有很多办法使积木倒塌:主要方法是在底部移除一个积木块或更多部分,还可以让另一个物体撞击搭建好的积木。

  这个思路可以很容易转化到到RealFlow中。例如可以使用一个小球来撞击。我们可以使用辅助器,初始速度或初始旋转来产生初始动画。也可以预先做好动画路径的方法精确控制碰撞受影响的部分。


2 积木

  这个玩具非常适合于解释,建筑物崩塌的基本方法和概念。建议使用一个简单的场景来进行测试,这是学习新知识的好思路。稍后,我们看一个更复杂的场景——摧毁的墙壁并伴有有碎片和灰尘。

  现在这个场景,我选择一个包含基本结构的例子,复制两次,但贴图不一样。积木总是有圆角的。关于细节方面考虑,由你自己来决定了。撞击的物体是一个球。(后面我就称为"撞击球")

  圆角需要更多的面,因此我们使用代理场景到RealFlow中。低模使用,这不是强制的,但这是一个很好的锻炼。要使整个场景更生动一点,我添加几个其它对像。在我们导入到RealFlow之前,要记得检查:是否所有模型是三角面,法线是不是正确的。


积木

3 场景设置

  在RealFlow中,场景导入是与其它案例导入方法相同,使用Import...对话框。激活所有对像的Rigid Body Dynamics。这里我们可以使用Sphere,Box和Mesh。使用相当小的场景缩放,就不得不调节@mass,要防止模拟有异常。特别是太轻的物体会产生很大的加速度,产生异常的运动。

  另外,很容易忽略的因素是摩擦力,这个值能提供某种意义上的的整体结构强度。低摩擦力会导致夸张的动态,而更高的设置会需要场景提供更多能量(因为摩擦力太大,会吸收更多能量)。为此,我倾向于使用值约为0.7。

  真正的积木弹性不是很强,所以最后把@elasticity减少到0.1到0.3之间,地板弹性也不要太大。软的或蓬松的物体会吸收能量,因为他们在反应时会改变形态。在本案关于这点将被忽略。

  最后一项,我们关注的是sphere(作撞击的球)。最重要的参数是@mass。撞击球不会太重,只是反弹到积木上,不会保留痕迹。质量必须大到能撞塌整个结构。测试后才能知道合适的值。缩放@mass可能会有另一个效果:相互穿插。使用更高的质量,我们要增加力才能给物体产生更大的加速度。所以,发现有穿插,减少球的质量,提高Substeps或增加其它物体的质量。


撞击球的设置细节


  即使没有定义初始转动,摩擦力也会使得球在地面滚动。friction值在在0.3到0.5之间。使用更高的设置,我们会失去太多的能量甚至会导致球停止运动。

  现在,添加Gravity Daemon,就使用默认值。打开Export Central,点击Select None 检查ANIMATION(.sd)。仅适用于记录单个对像的动画数据,有必要存储单个文件。


  4 寻找完美的撞击

  最后,我们得决定球到底撞到哪。你可以使用关键帧动画,也可以使用@Velocity值来生成做球的运动。大多数情况,我都使用@Velocity,因为当球随着时间慢慢加速,看起来更有动感,最主要是比较方便。第三个方法是使用Cache设置。当设置Cache时,物体会把动态输出到外部文件,也就是缓存。

  Node Params > Simulation > Cache

  你首先可以在Active模式下模拟,然后设置成Cache模式。这个设置特别适合使用已经模拟好的轨迹改变目标物体状态。

  测试时,不需要太高的Substeps。在25左右,差不多就够了,因为我们只为了找出最好的碰撞角度。如果你决定使用Stacking,在开始时激活它后,就不要改变它的值,直到你想得到完全不同的模拟。经过一系列碰撞与不同设置,我找到了"我想要的"碰撞,保存下来。

  正如你从这个案例看到的,刚体行为像真实世界中。其结果不可预测,微小的改变导致巨大差异。关于设置值,唯一能给出的就是使用范围内的值,而没有精确的固定值。此外它是一个个人感觉问题。可能有一个模拟,你非常喜欢,但你的客户会有不同的看法。刚体模拟就是测试和尝试,类似于流体。

  倒塌模拟设置是非常有意思的,你可以尽情实验,当然除了一些科学上严肃的模拟。另外使用慢动作设置,你会创建一个很有冲击力的效果。


  5 保存不同的模拟结果

  RealFlow 有一个简单的方法来存储,这些不同测试值得到的动画数据。使用这个功能你可以并排比较或快速把不同模拟,给你客户看。要使用这个工具,到Export Central,改变ANIMATION(.sd)文件名:



  首先重置你的场景,否则旧的名字会被覆盖掉数据。左击"animation"输入所需要名称,回车键确认。



  现在就可以保留之前模拟的数据也可以输出新的文件。

  在如下图中,看到六个方案,使用不同的摩擦力设置。这个参数影响是巨大的。也就是说根本没有统一的值。我们得比较不同模拟来根据需求决定,我们要使用哪个,或客户最喜欢哪个:

  1.是否有夸张的动态?

  2.所有运动是否自然平滑

  3.你能不能看到穿插物体?

  4.有足够的分支(diversion,分流,转移,。。。)在你场景吗?

  5.你能看到所有或大部分物体在最终摄像机中?

  6.是你最喜欢的吗,你想呈现给客户看了?


使用不同的摩擦力,产生不同的结果



6 破碎的艺术

  乍一看,砸破一堵墙太容易了,但实际要考虑很多东西。最重要的问题是建模,你到底想破成什么样的?规则的砖头或不规则?墙上有没有涂料?你想生成碎片和灰尘吗?当物体撞击到墙上时,你想要指定的砖头破碎吗?

  所有这些问题都能让你的动画效果看起来更真实。制作一个看着还不错的简单规整的墙不是太困难。但这个模拟更适合简要的教程和学习。在后面有更好的一些学习案例,使用RF3和RF4制作,一些老用户一定还记得。


使用ReaalFlow3进行的破碎。图片来源于Next Limit技术团队


  使用之前案例的经验,你可以使用类似的方法重新制作这个场景。原始的Next Limit视频包含了这个问题,作为本书参考(但本人没有得到这本书源文件,如果你有希望共享一下)


7 破碎表面涂料

  在这个例子中,我们想达到更高级别的真实效果。这也是为什么我们在前面要问,墙上有没有涂料层。一会你就会看到这个额外的层会带来多大的挑战.

  需要的工具和软件

  在本案例,要使用到3D软件。那些三维软件知识肯定是你已经掌握的。可能要花更多时间来制作的精确一点。我们还需要下面的软件:

  Adobe Illustrator CS 或更高版本

  Adobe Photoshop 3.0 或更高版本(可选)

  打开Adobe Illustrator,定义合适的大小,在RGB模式创建一个新文档。现在添加一个矩形(1),可以使用2:1比例。下一步是制作一个"洞",当撞击墙时,墙上的那个洞。使用Illustrator的路径工具(2),我们可以绘制适当的形状。


  复制洞的形状路径,保存。我们一会还需要它。剪切新的路径从下面矩形:



在矩形上面定义洞的形状



把它剪切出来


  现在我们有一个路径,就是物体撞击墙后留下的洞的形状。要防止不想要的改动,选择做好的路径并固定它,使用Ctrl +(Win ,有待考证)或Cmd +2 (OS X ).

  在下一步,我们想创建涂料层部分。碎片一定要很好的贴在洞上。按下Ctrl +F(Win)或Cmd +F(OS X)来放置和复制洞路径,精确的在这个位置。结果很精确。如图26所示。裁切出来重叠的线,在基准线,使用新的矩形,和Pathfinder tool(路径搜索工具,待考证)。现在,线匹配的很好,如图28.额外的步骤是必须的,要避免在三维软件中挤出问题。


  保留插入的线,选中并从工具栏中选择Knife(剪切)工具

  剪切工具有一个决定性的优势:它能分离一个区域到一个单独的路径,我们可以输出和挤出。这个面是完美的粘贴在一起,几乎没有任何空隙。现在只要"绘制"一个网状形图案,来生成破碎片。最终结果看起来如图29:


绘制一个基本网状形图案


  在这中间我们能看到反应部位。开始从表面中心部分,然后慢慢所有都破碎掉。

  基本形状差不多就做好了,但需要更精致。再次使用Knife工具,我们添加更多的细分。


更多细分后的结果


  在最后一步,我们需要清理重叠或错位的锚点。这也可以在3D软件中进行。模板准备好输出了。你可以选择另一个EPS或Illustrator的通用AI格式。可能你选择一个更老的版本,例如Illustrator 8或10。


  Tips

  1.使用Knife tool小心达到更好的控制路径。慢点移动

  2.尝试产生封闭曲线。需要时使用Magnifying 工具

  3.设置显示的前景色。有助于你更轻易的选择单独的锚点

  4.撤销的功能使用不要犹豫。(Ctrl/Cmd+z)为了画出更好的路径。

  一切都准备好了没?OK,载入网格线到你最喜欢的3D软件吧。一些软件导入曲线会自动生成一个组(group)。解除组(ungroup)。另一个很重要的事是,从大纲视图看下曲线。重命名为像Wall.现在挤出这些破碎的片,墙上的涂料层是很薄的(但不要太薄)。


8 导入和优化

  不幸的是,很像我们制作模板线一样,我们要在3D软件中手动做一些调整。可能有一些路径我们得要替换或重建。但考虑到我们是很复杂的曲线结构,这是可接受的。下面截图是原始的和清理后的面:




  当然,整个结果要默认生成Polygon。最终的质量取决于你3D软件和你前期所花的工作时间。在很多例子中,有一些很小的洞和裂缝留下。。这些不足可以使用一个合适的纹理贴图弥补。如果需要更好的质量,,通过移动反转相关的点到正确的位置你可以消除这些裂缝。根据错位点的数量,整个工作需要花费一些工夫。(译者注:上面这么多步骤其实就是为了制作破碎的面片。现在技术有了发展,可以使用一些插件自动生成碎片方式。在Rayfire或PullDownit都有默认的方式来生成这种破碎。然后简单做一些调整就好了。当然上面方法是最自由的)

  现在最繁琐的部分完成了,我们可以在涂料层后创建砖块。我们不需要整个模板填充砖块。砖块生成区域在洞周围,也有一些砖块要保持静止。为了示范,只有一个基本的房间,模型在撞击区周围。

  建模完成后,选择所有对像转换成三角面,如果必要的话。强烈建议检查一下法线。最后,导出这个场景。


9 在RealFlow中的工作

  打开RealFlow,,创建一个新的场景,载入之前导出的SD文件。有点耐心,可能有点慢——特别是有许多碎块物体时。可能会看到有提示,说有一些面有错误。万一这样,可以回到3D软件重新建立这些几何体。如果不是很多的话,也不太严重的话,可以忽略掉。

  第一个任务是给碎片和砖块打组。也要给洞周围静止的砖块打一个组。到Export Centtral(输出中心)点击Select None,只是激活 ANIMATION(.sd),防止RealFlow读入几百个单独的SD文件。


  接下来步骤是这样:

  1.激活所有对像和组的Rigid Body Dynamics

  2.为运动的砖块,灰尘部分和球,激活成Rigid body

  3.设置合适的类型(Mesh或Convex Hull)

  4.调节@friction和@elasticity

  在一些案例中,质量(mass)是非常低的。如果能注意这个动态,必须要为整个组改变@mass属性,或单独为每个物体,使用脚本。因为砖块有同样的大小,我在组中全局改变@mass。为碎块,我使用了一个小脚本,类似我使用在其它工程中的:


  要使用脚本,打开Batch script窗口(F10)

Layout > Batch script

  Batch Script: ChangeMass.rfs

  debris = scene.getSelectedNodes()factor = 25for object in debris: old_mass = object.getParameter("@ mass") new_mass = old_mass * factor object.setParameter("@ mass", new_mass)

  复制上面的脚本粘贴到这个窗口。选择所有碎片物体(不是组!)选择:

  Script > Run

  等一会后,所有物体参数设置好了,你可以继续使用Gravity Daemon了。撞击球有动画,可以使用初始@Veloctiy值或key帧。之前我做好所有设置了,可以来撞击模拟了。


10 怎样消除抖动

  你会注意到物体,不久就会产生不想要的运动:碎片部分开始落到地面,然后突然移动,无法观察到为什么会这样。根本原因当然是重力。像"放松流体",重力让物体运动和下落。有很多方法,处理这个问题。有的场景中使用约束器(Constraints),另外使用初始状态,或激活/关闭刚体。



  很愿意在这介绍另一种方法,使用两个Gravity辅助器。当撞击球撞击到砖头上就激活切换另一个辅助器(Simulation>Active/Inactive)。如果你的撞击球是key的帧,那就不需要另一个Gravity辅助器。如果你想让@Velocity值和重力来控制撞击球,就需要添加另一个辅助器。

  在Global Links面板删除新的辅助器,拖动撞击球到Exclusive Links面板。现在获取Gravity02 对像 ,把它放到到Sphere项的Exclusive Links:

  关闭Gravity01。很好解释,Gravity02只控制Sphere对像,让所有其它对像不会受影响。同时撞击球会受影响,中止模拟并设置Gravity02为Inactive,Gravity01为Active.继续模拟。这一时刻,所有能移动与其它反应。

  如果你熟悉Python脚本,你可以使用自动版本在源文件中:



  CollapsingObjects/Collapsing Wall/CollapsingWall.flw

  最终,我们场景设置准备好了,可以继续,调节Stacking和Substeps模拟参数。要合适的质量级别,Substeps值范围在100到200之间。让值小于150,看起来砖块交互更好看。因为我们的墙有涂料层,最好使用Stacking值为10。几个测试后,得要调节sphere(撞击球)的@mass值。

  在下面图片可以看到,这个效果一个经典的瞬间:中间,碎块有很大的加速度,形成环形破洞。


被撞塌的墙碎块有运动模糊


Tip:如果你遇到物体穿插的问题,你不需要重新模拟整个场景。中止模拟,回到还是正确位置的地方。备份当前SD文件,返回RealFlow。增加Substeps,从这个时间点开始计算,而不需要重置整个场景。


9 改善提高

  这有两个改善场景效果的方法。使用Emitter(无论是RealFlow中还是3D软件中都没关系),你可以添加更多小碎块。第二个发射器,携带体积材质(volumetric shader),有助于添加灰尘,让场景更可信。

  另外,另一个很好的用来提高模拟效果方法是贴图。动态贴图,显示在被破坏的墙上,是一个好主意。如你在上面图片看到,运动模糊加强了速度感。甚至相机移动有一个很大的影响对场景。在反应开始时,随机的相机抖动,也有助于效果更真实。


,realflow案例,realflow教程