签到

07月14日
尚未签到

共有回帖数 0

    马子

    等级:
    关于约束器的故事

    8.1 为什么要约束(constraint)?约束(constraint)是刚体动力学(RBD,Rigid Body Dynamics)一个基本组成部分。用来限制或约束特定运动。RealFlow提供了不同种类的的约束器(译者注:RealFlow5版本开始,使用了一套新的叫MultiJoints约束功能来代替Joints),代表了现实世界中最有代表性的"连接"关系。现实世界中有无数约束的例子:门,铰链,绳索,铁链,球关节(滚珠),等等。这些类型的约束器可以帮助我们创建更真实的运动。使用约束器,我们不必关心物理效果,事件。让两个或更多物体连接在一起,如内部摩擦力或旋转,自碰撞,钟摆效果等。实际上,几乎能用在所有运动上。8.2应用约束器约束器很强大,但有时候用起来很繁琐。有些情况,很容易使用,不过我们得要考虑一下约束大的位置和父子关系。约束器的功能和最终运动强烈取决于约束器所处的位置。我们使用一个简单的场景来使用Ball_socket约束器。这个场景只有一个约束器,一个盒子和一个重力场,如图40.

    图40:第一个示例基本场景要添加第一个约束器,执行如下简单的步骤:



    Ball_socketEdit  Add  Constraints  Ball_socket注意,Cinema 4D的缩放是0.01:我们可以在视图看到一个新的结点没有新的大小或开关,只是一个Null对像。只要改变约束器Scale参数,我们会看到选择类型所代表的图形。下图显示了所有可用类型的约束器:

    图:RealFlow4的8种约束器截图
    1. Ball_socket 2. Hinge 3. Fixed 4. Slider5. Rope 6. Path_follow 7. Car_wheel 8. Limb建议让约束器大小与物体类似,提高稳定性。从Node Param面板打开相应面板,看到很多新的属性参数。大部分约束器有特定的参数,特定的属性。但我们会看到一些通用的设置,像Child,Parent或Breakable Force,让我们详细的看一下。

    重要提示:应用约束器之前,一定要打开被应用对像的刚体动力学(Rigid Body Dynamic)8.2.1 Child(子物体)这一定是所有约束器最重要的设置。每个约束器需要一个子物体。点击"-(符号)"打开一个新窗口,包含了所有可选的结点。子物体是基本的物体,因为Parent(父物体)是可选的。只选择一个子物体,约束器的位置(position,这里是0,0,0)。可以在旋转中心看到。约束器动态像一个看不见插销,子物体被固定住。约束器一次只能有一个子物体(父物体)。使用Ball_socket 约束器,物体动态像一个钟摆。这个简单的结构,我们能观察到空气阻力影响很大。使用更高的空气阻力和空气的延长率(elongation)会让物体减速。 要小心约束器所处位置,尽管它可以在3D空间中的任何地方。甚至在子物体内部,也是可以的。我们可以用子物体自己的位移值来放置约束器。但有时,不建议这么做。想一下门轴,并不是在门的里面。如果我们想让门很合理的开关,约束器就要放置边上。另一个方法是改变@CG值。

    图41:使用不同的空气阻力(air friction)时,钟摆最大高度。子物体旋转中心不是一定要在物体中心。它取决于@CG值,也称为重心(Centre Of Gravity)。通过改变这个参数我们能使用特别的点。这会产生完全不一样的动态。

    图42:使用不一样的@CG(0.5/1.0/0.25),产生不一样的运动路径使用约束器,到物体刚体设置上,能明显的看到碰撞与交互。物体约束的父子关系需要仔细考虑。你可以多建立几个物体,然后相关连接,仔细体会一下约束的父子关系。8.2.2 Parent(父)父物体作用是:替代约束器作为插销(约束中心)。在图41,我们能看到蓝绿色的点,作为方盒子旋转中心点。引入父物体后,旋转中心就是所选择物体的中心。类似于子物体,@CG值由父物体旋转中心决定。通过改变父物体和子物体的@CG值,我们能做的相当复杂的运动。默认不需要父物体,因为约束器自身就可以作为旋转中心。记住父物体作为一个插销,像一个挂钩。挂钩可以用来固定不止一个物体。当使用父物体后,子物体移动受父物体约束影响。举个例子,你不可能制作一个没有火车头来牵引的火车来。使用父子系统可以在两个物体之间做到非常复杂交互关系。子物体能推动父物体,父物体也可以推动子物体。如果我们激活自碰撞(Self Collision),他们甚至能相互碰撞,产生不同的运动轨迹。下图场景使用一个运动的球,和有初妈速度与旋转值的圆环碰撞。约束器是Rope类型。

    Self Collision(自碰撞)这个参数,RealFlow了提供三个选择:a. Disabled(关闭)b.Always(永远)c.After break(之后断开)默认值是关闭。如果我们想连接的物体碰撞,就要激活Always。不是这个选择,这个父子系统就相互穿插。对于有未知的运动,最好改成Always.第三个选择(After break)只有在激活Breakable frame(打破帧)或force(力)才能起作用。8.2.3 Breakable frame和Breakable force约束器可以固定或打断。使用Breakable frame可以定义打断的时间点,打断时约束器会释放它关联的物体。使用Python脚本,我们能触发Breakable frame功能在一个确定的事件发生后才作用。例如,当有物体撞击到父物体或子物体。使用Breakable force,它类似于:在@Force下输入特定的力,但这个值的轴,显示不是表面上的,大部分在拖尾,有误差。(this value is not always apparent to us and ostly a result of trial and error),在这里取决于不同的参数,像mass,Initial Velocity和结果Acceleration.空气阻力(air friction)也有重要作用,它会让物体减速。Daemons(辅助器)会影响这个值,因为它们控制不同力到场景中。断开操作只是解锁父子结合。对特定的约束器,例如Ball_socket它有时会从约束器面板上移除子物体,如果我们想要重新模拟场景,我们得要再次建立关联。这是一个bug,但我们可以重置(reset)这个场景解决这个bug.8.3 约束器示例和提示

    一个物体可以同时作为子物体和父物体。这个功能对锁链特别有用。下图适合使用Ball_socket约束器。这个关联物体动态像个索桥,从一个固定点垂下。在这个例子,除了第一个,其余每个物体既作为子物体又作为父物体。顺便说一下,第一个物体是静态的。否则整个就会落下去了。上图让人很容易想到木制的索桥。如果想创建一个桥我们再一次用到辅助物体。所有木条将会移动,辅助物(这里是小球)保持静止。

    下垂感觉是因为重力作用的结果。使用Breakable frame,我们能指定特定时刻,让桥断开。这种效果像Spring-mass(弹簧质点)系统。在断开时,我们会看到到轻微的收缩,与现实中一样。

    图43:索桥断开一直到现在,我们只讨论可移动的约束器。有一个约束器类型,称为Fixed,我们用来粘合到一起。特别在破碎效果场景 ,Fixed约束器可以用来建立一簇或一组物体。你一定记得前面有一章:"摧毁墙的艺术"。在这个场景,有很多砖头被撞飞。要更真实一点,可以使用Fixed Constraints把几块砖头连接到一起。另一个方法是直接在三维软件中把砖块变成碎片。在RealFlow,这些碎片可以加入到约束器,在有碰撞交互时再分开。当然,我们需要使用Breakable frame。Fixed约束类型经常用来稳定整个场景,但这会让模拟时间变长,特别是有很多物体时。使用这个方法解决刚体抖动问题,不是最优的解决方案。最好消除抖动的方法是使用Python脚本,完全合并模型。对较小的场景或有特别的需要时,选择Fixed约束器可以更快更可靠。制作流程最大麻烦,就是有二三十个或更多数量的约束器。每个约束器都要手动的选择父子物体。要自动完成这个任务,当然是使用脚本来完成。有几个脚本可以用来关联大量物体,使用Fixed约束器。其中一个脚本可以在里下载到。http://resources.realflow.com/news_scripts.php?t=0#page=1&mode=1&id=245(这里RealFlow官方资源下载网站。需要注册下能下载。)使用这个脚本到工作中,本书不为第三方脚本和程序承担责任。8.4 接近柔体的刚体模拟RealFlow约束器的参数甚至能让模型接近柔体(Soft Body Dynamics).实际上柔体使用的是一个非常类似于弹簧-质点系统(spring-mass,可以查看一些论文维基词条更了解)的方法。在这个案例,我们将创建更有趣的场景:刚体阵列,使用约束器关联,显示出柔体动态。这个效果的场景看起来是很复杂的,但只不过是刚体数量多一点而已。手动设置,不容易操作,因为每个物体都要与相邻物体关联。实际,我们一次完成。这个功能(play on the fact)允许我们建立网格或,考虑骨骼刚体。交互起来像刚体,因为是在柔体类型之间关联。8.4.1 场景我们的场景真的非常简单,是一个9*9的圆环阵列。你可以从三维软件创建好再导出来,或直接在RealFlow创建。我决定使用3D软件,输出SD文件。另外我用球体作为碰撞物体。在RealFlow,主要任务是使用Ball_socket约束器关联。对很大的阵列,还是使用脚本吧,虽然写一个脚本也要花些时间和功夫。8.4.2 设置Ball_socket约束器建立"semi-static"(半挂静态)关联。这意味着两个结点之间距离是相同的,因为我们所有自由旋转和碰撞。另一个好玩的是,将使用Rope约束器。总共有144个约束器进行关联,薄纱一样的结构。注意,因为填充Child和Parent场。由于物体大量点,有可能有错误。慢慢测试。为了方便演示,我决定把圆环之间空隙留大一点。当然,你可以增加缩短距离。

    场景中所有物体都要切换成刚体。如果有必要,调节圆环的@mass值,使用默认的值0.7到0.3。Substeps值在10到15,这个案例就足够了。现在我们准备模拟。我们试验的这个模拟起来很像柔体或布料。这个使用真正的柔体可能要快一点,但我们目的是用它来理解约束器的原理。8.4.3 效果比较

    上图片是效果截屏,与真实的柔体进行比较。布料物体使用了10*10阵列,代表了场景中的约束器。这是相同低的分辨率,但非常接近示例的RBD场景。在几帧后圆环结构已经覆盖住碰撞物体,因为柔体更僵硬。第一和最后一帧显示了类似状态。使用更高的分辨率,和约束器设置,并遵循类似物理参数,我们可以会看到效果更接近。这个示例强调了刚体灵活性和强大功能。刚体有更多更好的能力,它是很强大的模拟系统。8.5 更多应用场合约束器是RealFlow刚体强大的功能。它们很容易使用,尽管有时应用起来很累赘,特别有是很多物体时。如你不在乎碰撞与特别固定部分,使用约束器会给你更大的自由。可以使用到很多模拟效果中,结果很自然:1.模拟一个大车轮2.轮胎减震模拟3.汽车,开过一个崎岖不平的街道4.索桥5.浮标,浮在海面6.船或汽车,跟随路径约束器7.热气球模拟8.球撞到部分固定的墙9.所有各类的门10.机械系统,使用Slider约束器。译者注:本套约束系统在RealFlow5开始就被MultiJoints所取代了。MultiJoints是更强大更自由更方便的约束系统。并且他们虽然功能类似但完全基于不同的原理。MultiJoints更多资料可以直接参阅RealFlow帮助文档。我会尽快把我理解的MultiJoints分享出来。现在理解这个Joints系统也有助于理解MultiJoints,不要忽视知识之间的联系性。


    来自豆芽兵博客

    楼主 2015-06-09 18:26 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知