RBD 双车碰撞

RBD汽车断裂SOP和RBD汽车变换SOP,结合Houdini中现有的RBD车辆装配工具,使得快速轻松地建立一个可运行的汽车碰撞模拟。这个示例涵盖了整个过程:绑定和驾驶两辆车,使用新工具进行破碎,以及用RBD子弹求解器模拟碰撞破坏。它还展示了如何变形汽车、车轮和悬挂系统,包括一些尘埃和碎片模拟的设置,以及用于程序缓存和不同摄像机渲染序列的TOP网和LOP网设置。还有一个小型COP设置,用于基础合成。

快速与破碎

深入介绍了 Houdini 21 刚体动力学的新内容,重点介绍新节点如何改进和简化现有工作流程。我们解析了不同的 Car RBD 工作流程,展示了这些工具如何在设置车辆毁灭模拟时为您提供更多控制和灵活性。

新的RBD汽车断裂SOPRBD汽车变换SOP结合Houdini现有的RBD车辆装配工具,使得快速轻松地建立可运行的汽车碰撞模拟。

  • 装配和驾驶两辆车
  • 用新工具破碎它们
  • RBD子弹解算器模拟碰撞破坏

第一步 – 设置

开始绑定过程时,务必做好充分准备的几何形状。这包括正确的分组针对不同零件,清晰的名称属性,以及干净的几何体——避免开放面、松动点或相互渗透的网格。虽然RBD汽车断裂SOP可以处理一些拓扑问题,但建议清理和准备几何体以获得最佳效果。打开GEO_car_asset几何节点查看本项目中使用的车辆资产。

图片[1]-RBD 双车碰撞-houdiniUE

在这种情况下,汽车模型已经有合适的组、法线、UV和@name属性。通常,由于@name属性在破碎几何体时会被覆盖,我们会想把原始名称属性复制到不同的属性名下,或者作为@path属性来在Solaris中分配材质。幸运的是,这里已有一个@shop_materialpath属性,可以为同样目的重命名为@path。一些额外步骤包括给车轮的部分涂色以更好地可视化其旋转,以及修正车身的UV映射,以便后续在哥白尼中贴图时使用。 说到这里,我们准备开始布置。

项目文件包含多个版本的斜坡几何体,以及斜坡HDA。你可以使用任何提供的变体,或者修改HDA来创建自己的——只要确保事先安装。你可以在GEO_procedural_ramp几何节点中找到斜坡,以及用作碰撞的高度场。

第二步 – 装车并驾驶

一旦车和坡道搭好,我们就可以开始安装车。在这个例子中,同一车型为 用过两次,但这个设置同样适合模拟多辆车。 让我们深入SIM_car_driving看看它是如何设置的。

图片[2]-RBD 双车碰撞-houdiniUE

RBD车辆装配SOP控制驾驶参数,而RBDxform SOP则设定装配后车辆的起步位置。我们先在车辆装备中分配车轮组方向盘组,然后动画化转向速度刹车手刹参数,塑造驾驶模拟。为了获得更准确的结果,我们将配置更多设置,如质心加速度曲线轮胎摩擦车轮比例悬挂密度。由于两辆车除了动画元素外完全相同,所有参数都保持不变。

车辆在合并前使用RBD Pack SOP进行打包,然后通过启用“强制每个实例强制唯一名称属性”并使用@index属性,RBD Unpack SOP进行分离 。这确保每辆车都有独特的特点 name属性,对于子弹解算器区分它们至关重要。

RBD子弹求解器中,使用几何纠接, 碰撞设置为忽略除地面平面以外的所有因素以减少 通过防止车辆相互碰撞来缩短模拟时间。目前我们只需要汽车 从斜坡上起飞,继续穿过场景。所使用的VEX代码如下:

s@collisionignore = “* ^地面”;

此外,@restxform属性还会从RBD子弹求解器输出,用于将断裂几何体与模拟点一同变换。

在这种设置中,地面平面是一个包含斜坡和地形的高度场。它在GEO_procedural_ramp几何节点中准备, 在RBD子弹求解器中的碰撞标签下被指定为碰撞对象。

图片[3]-RBD 双车碰撞-houdiniUE

该过程的两个主要输出是:

  • 模拟点——每辆车独有。
  • 变形汽车几何——轮子和悬挂系统使用RBD汽车变形SOP动画。

RBD车身变形中也使用相同的高度场,以确保模拟后车轮和悬挂的准确变形。

第三步 – 断裂

大部分工作都在这里完成——但都集中在同一个节点内。SIM_car_fracture内,驾驶时使用的车辆与此相同 模拟使用相同的RBD车辆装车(无关键帧)连接到新的RBD车辆断裂SOP。这不仅保留了绑定产生的名称和约束——这至关重要 用于后续模拟——同时还包括质心轮胎摩擦车轮比例、悬密度等关键属性,确保整个设置过程的一致性。

我们使用独立的车载平台,保持驱动和压裂过程的独立性。这让 在驾驶上不断调整——调整速度转向等参数——无需重新破碎 每次都是车。然而,如果对车轮比例质心等属性有重大更改,更新该车架并重新断裂车辆以保持准确性非常重要 模拟结果。

第一步是设定底盘组。这辆车的底盘分为三部分:“front_suspensions”、“底盘”(这里指排气管)和“rear_suspensions”。对于正面撞击,我们希望前悬挂断裂,因此只使用“底盘”和“rear_suspensions”,将它们锁成一个固定车轮的整体。这种结构允许我们断裂 前悬挂则是单独的。

如果有外部对象如载波或天线应排除在仿真之外,我们可以在忽略组中指定它们。既然我们没有,就照原样进行。

如果你有动画汽车几何体,必须指定休息框架并启用重新对齐轮子。这样可以确保繁重的计算不会依赖时间,轮子也不会分别发生双重变换。因为我们是在破碎一辆静态车辆,可以让Rest Frame保持在1,禁用Re-Align Wheels

图片[4]-RBD 双车碰撞-houdiniUE

我们将先对前轮进行破碎,因为碰撞时轮胎会被压扁。关键是只选择轮胎几何形状(橡胶部分)进行破碎,保持轮圈原样,这样车轮仍固定在车上,且来自Car Rig的约束保持完整。默认情况下,轮胎会有“软”约束,无需切换,使它们表现得像“橡胶”一样。

我们会调整断裂密度以适应更多部件,并启用边缘细节来打破均匀的沃罗诺伊图案。需要注意的是:调整边缘细节参数时,代理几何体可能会开始出现异常行为。为避免这种情况,避免极端调整,或通过相应调整断裂密度来补偿。

图片[5]-RBD 双车碰撞-houdiniUE

接下来,在“分段”标签中,流程变得简单。我们会将汽车的不同部件分配给不同的部分,分别是 对断裂类型(金属、玻璃、木材、橡胶)的独立控制。除了添加边缘细节外,启用代理到几何体还提供了带有不同片段大小的额外破碎层。约束属性如强度等级刚度等级角度刚度等级也可以根据每个部分调整,但目前我们保持默认。

图片[6]-RBD 双车碰撞-houdiniUE

还有一个复选框用于启用“约束到邻居截面”。启用后,它会自动通过胶水约束连接附近的部分。 对于需要手动约束设置的部件(如铰链约束),最好关闭这个设置。对于金属,我们将使用Sheet 模型,因为这些零件是平面几何而非实体物体。尽管是平面的,RBD车断裂SOP在创建代理时会挤出平面并将其转化为固体物体。这种挤出是可以控制的 由厚度参数决定。

图片[7]-RBD 双车碰撞-houdiniUE

对于玻璃,我们将在除挡风玻璃外的所有窗户应用安全模型,挡风玻璃则使用冲击模型。 这是一个富有创意的选择,允许挡风玻璃以同心圆方式裂开。安全模型还包含塑性变形 而 Impact 模型则需要更手动的设置——因为它默认只包含胶水约束。 这会导致玻璃立即破裂,但我们希望它先稍微弯曲以露出同心圆 裂纹图案。为此,我们使用RBD约束属性SOP覆盖约束,在模拟崩溃前先从胶合约束切换到软约束。

如果你查看RBD汽车断裂标准作程序中的“Sections”标签,你会看到车辆如何划分为 根据组成部分和材料类型划分不同的部分。目前,所有节值保持默认状态, 除了边缘细节约束颜色,允许快速迭代破碎车辆。

图片[8]-RBD 双车碰撞-houdiniUE

此外,你还可以控制 Section Connector 约束和全局约束属性。 这里的强度刻度刚度刻度塑性硬化刻度影响所有约束 在各个部分和部分之间,整体呈现。 由于悬挂来自Car Rig,悬挂刚度等级也可以在这里调整, 无需每次都返回钻机。 这里显示的数值是在多次测试迭代后最终确定的,然后才缓存了破碎的车辆。

这些约束值可以在此阶段或之后通过模拟前的独立RBD约束属性SOP进行调整。在这个项目中,我们将两者兼顾。由于RBD子弹求解器中约束迭设置较高,强度刻度刚度刻度塑性硬化刻度显著降低。 随着迭代次数增加,除非显著降低约束的粘附强度,否则约束条件变得更难打破。 这时全局参数尤为有用——它们让我们能够在各个区段中微调所有约束 无需手动调整每个方法,工作流程比旧方法更为简洁。

图片[9]-RBD 双车碰撞-houdiniUE

我们将启用“禁用电机”功能,在事故后停止车辆运行, 并开启重定点锚点,并分配前轮组,使其在撞击时与前悬挂分离。 在这种情况下,这样做是必要的,因为我们面对的是正面碰撞,前悬挂的部分部件预计会断裂。 如果不重新瞄准,轮子可能会挂在空物上,这看起来很不自然。 启用重定向时,之前附加在“机体”(机箱组)上的约束锚点 被重新分配到最近的断裂块——因为这些碎片不再标记为“身体”。 这使得车轮与断裂的前悬挂和车轴一同脱落。

为了优化性能,默认启用了多边形减少代理几何,但我们会关闭它以避免发生体积丢失错误,尤其是对于较小的部分。计算碰撞填充可以在这里或子弹求解器中调整,也能防止同样的问题。

默认情况下,匹配输入密度启用以匹配车辆绑定中定义的车辆重量。 不过,如果需要,你可以关闭它并手动调整配重,无需回到车载。我们就保持原样,因为现有的重量已经足够用了。

这是在所有这些设置后,初始骨折的样子。

图片[10]-RBD 双车碰撞-houdiniUE

尽管对各段有广泛的控制,并实现了自动约束和代理设置, 深入了解RBD车辆断裂标准作程序(SOP)还能进一步优化这一工作流程。

为了更详细地描述挡风玻璃裂缝,我们将用分割标准作业程序(Split SOP)分离挡风玻璃,并利用内侧面板进行散射点。将这些点输入RBD材料断裂标准作程序(SOP)进行压裂,有助于保留现有的设置。然后,我们将根据@name属性复制@__section属性到新分裂的部分,以保持一致性。

下一步重要步骤是建立RBD连通面SOP,并为现有的内侧组和新分裂的内部组启用对面名称。 禁用创建约束,因为这里不需要。 这一步对于切割破碎玻璃至关重要,确保只有在破碎时才能露出内部面孔。 之后,我们会再次复制必要的属性。

同时,我们将为引擎盖和后备箱设置铰链约束。这允许它们在撞击时弹开, 碰撞时的运动更加自然。 铰链约束应设置为困难仅位置以锁定位置 同时允许铰接周围旋转。

图片[11]-RBD 双车碰撞-houdiniUE
图片[12]-RBD 双车碰撞-houdiniUE

自定义断裂和约束设置好后,现在是使用 RBD IO SOP 缓存车辆几何体的时间缓存。这样我们可以保留单个破碎版本的车辆,同时自由调整驾驶模拟。由于断裂设置独立于驱动器,我们可以在碰撞模拟中测试断裂后对断裂进行迭代,就像本例中所做的那样。

第四步 – 撞击模拟

如前所述,车辆断裂SOP允许你在现有设置基础上进一步构建。 此阶段,我们有一辆破损的汽车和两组独特的驾驶模拟点,包含@restxform属性和驾驶模拟数据。 利用新的RBD汽车变换标准程序,我们可以利用这些模拟点驾驶破损车辆。打开SIM_car_crash几何节点跟着作。

为什么要用RBD汽车变形SOP而不是变形零件SOP?

变换棋块SOP的工作原理是将点上的名称属性与几何棋块上的对应名称匹配。然而,驾驶模拟只提供6个点——4个车轮、1个车身和1个转向装置——而破碎的赛车则有许多独特命名的部件。RBD 车辆变换标准程序通过在代理几何体上使用@sourcename属性解决这个问题,该属性与输入几何体的原始名称和仿真点的名称相匹配,从而实现了整个汽车的精确变换。

在插入积分之前,我们会先从积分上移除@index属性,因为在破损车辆上没有这个属性。 你可以在破碎几何体上重建@index并合并 之后,跳过这一步更简洁高效,而是在下游使用RBD PackRBD Unpack节点来管理和对齐数据。

本阶段设置了一些额外约束,用更多铰链约束锁定一辆车的引擎盖和另一辆车的后备箱。 这意味着它们会被锁定,直到模拟的某个阶段,之后这些约束会在子弹求解器中删除,以便这些门弹开。

由于这对每辆车来说是特定的,且最好在静态破碎几何体上创建,所以通常在变换车辆之前完成。完成后,我们可以将几何体、约束和代理以及仿真点连接到RBD车辆变换SOP中。该节点默认启用了重新对齐轮子,必须保持原样,以防止碰撞模拟中轮子出现奇怪的旋转。

图片[13]-RBD 双车碰撞-houdiniUE

我们还会执行其他车辆特定的作,比如在打包和合并前编辑各个部分的约束属性。在这种情况下,整体金属约束强度已被调整 独立地使一辆车比另一辆车更刚性。此外,速度还可以通过简单的VEX表达式进行作:v@v *= chf(“乘法器”);

这会生成一个浮点参数,将速度乘以指定的值。这里用它让一辆车撞向另一辆车并在碰撞时穿透。

之后,两辆车被装车合并——就像驾驶模拟阶段一样。

图片[14]-RBD 双车碰撞-houdiniUE

拆包后,我们将修改两辆车共有的约束属性。在这种情况下,做了以下调整:

  • 轮子约束的胶粘强度已提高。
  • 针对轮胎软约束的角度阻尼进行了调整。
  • 挡风玻璃的限制也被重新定义。
  • 引擎盖和后备箱门约束的角度属性也进行了调整。
  • 截面连接器约束和窗口约束的强度有所提升。

(所有这些调整都是针对该设置的,经过多次碰撞模拟的改进。)

在模拟前,车辆会被分开并在第一帧用时间移SOP冻结。这些设备后来将被用于 RBD 车辆变形,作为变形的参考输入。

另外,两辆车也被冻结在模拟起始帧处,缓存为高分辨率几何体,随后进行变换 使用带有模拟点的变换部件SOP进行作。为什么?因为我们有对应的唯一名称属性的点 每件作品的名字。这种方法减少了将重几何缓存到磁盘的需求。

由于约束不能像几何形状那样被转换——因为我们是在子弹求解器中设置它们以便删除——约束必须与模拟点分开缓存。重新定时以适应慢动作是必须的,因此我们会缓存更多子步到磁盘以提升准确性。

图片[15]-RBD 双车碰撞-houdiniUE
图片[16]-RBD 双车碰撞-houdiniUE

大部分关键工作都在RBD子弹求解器中的约束标签下完成。这里,我们将使用 @constraint_tag 属性选择约束组,并根据阈值或特定帧删除约束。这让我们能精细控制车辆的分解方式,从而实现更多艺术导向的破坏。

例如,在右侧图片中,所有金属约束——即软约束——都被选中并设置为删除 超过0.055阈值,导致受撞部件断裂并飞散,增强模拟的动态感。 你可以在“突破阈值”下的所有标签页中查看这些设置——过程相当简单。

除此之外,还有几个参数有助于改进模拟:

  • 约束迭代次数显著增加。
  • 碰撞填充适用于拼块间和几何体间的交互。
  • 开启阻力以帮助稳定运动。
  • 开启了随机化约束顺序以提升稳定性。

模拟非常小的作品的一个常见问题是它们不容易沉降,并且会持续抖动。这是因为他们的 质量极低——远低于0.1。为此,我们使用RBD子弹求解器中的SOP求解器,读取每帧每个片段的计算@mass@v。使用属性调整,我们将@v(速度)乘以0.96@w(角速度)乘以0.84,逐渐增加 如果棋子@mass小于0.1,@v小于1,则减少移动。此外,我们会为这些棋子@timer,如果计时器超过24,我们会完全停用该棋子,使其不再移动。

图片[17]-RBD 双车碰撞-houdiniUE

在缓存仿真时,我们只缓存模拟点和约束,每个有10个子步。既然我们已经把静态破碎的车辆保存到磁盘中,我们可以利用这些模拟点配合Transform Pieces SOP来变换破碎的车辆。但为什么我们需要缓存子步骤?在此之前我们会详细说明,届时我们会看看物体层面的FARM_cache顶

TOP设置用于使用渲染农场运行所有仿真缓存。这是一种高效地运行多个模拟,同时仍能继续处理当前文件的方法。如果没有农场可供利用,这个PDG设置仍可通过本地排程器运行。此外,你还可以为任何你想迭代的参数设置楔形。虽然这里还没有人这样做,但你可以在方便时尝试。

该项目的一个要求是重新调整撞击模拟的时间,以创造慢动作效果。这时缓存子步骤变得非常重要。当你直接从求解器重新计时模拟时,子帧数据(整数帧之间的信息)依然可用。这使得Retime SOP能够在帧间平滑插值,产生准确的慢动作效果。 然而,一旦仿真缓存到磁盘,默认行为是每帧只存储一个子步。这意味着子帧数据丢失,阻碍了正确的插值。为了解决这个问题,我们需要缓存多个子步骤。几何体缓存子步可能占用磁盘空间较大,因此我们会在子弹求解器输出的模拟点上缓存子步,这样效率更高,同时保留了所有重新定时所需的信息。

由于我们设置约束在某个阈值之后被删除,无法像对几何和代理那样利用这些仿真点进行约束转换。这就是为什么我们必须缓存与点数相同的约束。

现在打开POST_retime_for_slomo几何节点,看看RBD模拟是如何重新定时的。

步骤5 – 重新定时与变形

变形过程被大幅简化。RBD变形件SOPRBD车辆变形SOP是两个主要关注节点。不过,在变形前,我们需要一个慢动作版本的车辆作为最终输出,因此在变形几何体之前使用Retime SOP是明智的。

图片[18]-RBD 双车碰撞-houdiniUE

利用Retime SOP,我们将从模拟开始拉伸5帧到50帧。按帧区间重新定时是个不错的选择,因为它能准确降低90%的速度。同样的因素之后也可以应用于所有次级模拟的时间尺度,比如碎片和尘埃。

由于车辆在指定帧区间后不会移动,我们切换到一个时移SOP,将正常速度模拟偏移到慢动作结束处开始。现在从撞击帧到结束的一切都覆盖了,我们仍然需要碰撞帧前的数据。这就是下一个切换SOP发挥作用的地方,从实际缓存切换到慢动作。这个过程在约束和代理上重复,然后根据@index属性将两辆车拆分。

图片[19]-RBD 双车碰撞-houdiniUE

将两辆车分成不同的流后,我们可以进行单独的变形作。这允许对每辆车进行手动调整,比如撞击后的动画。让我们深入看看POST_car_deformation几何节点。

RBD 变形件 SOP 需要三个输入:几何、约束和代理几何。该必须使用破碎阶段创建的@name属性来设置。由于我们只需要变形金属和橡胶,最好在汽车断裂标准作程序(SOP)中相应地命名这些部件(例如metalxyz、rubberabc等)。将组类型设置为点,边界连接设置为集群属性和约束。这确保了被删除约束的部件不会保持变形状态,而是正确地断开。将集群属性设置为@parentpiece。最后,对于RBD车辆变形SOP,使用碰撞模拟前的参考几何输出作为第二个输入。

图片[20]-RBD 双车碰撞-houdiniUE

确保在RBD汽车变形SOP中将底盘基础组设置为@name=车身-(@index),基于你车辆的指数,这里是0或1。

解包输出几何体后,我们需要使用 RBD Disconnected Faces SOP 重新启用 @oppositefacename 属性,并创建 @disconnected 属性。这允许我们基于该属性删除内部面,并用它在内部面上散布点以获取玻璃碎片。

图片[21]-RBD 双车碰撞-houdiniUE

使用包含相互渗透几何体的资产时的一个问题是,尽管汽车断裂SOP可以仍然使其断裂,但模拟可能会在某些部件中产生意想不到的行为。在这种情况下,前左轮——预期会旋转,因为它受到的冲击不大——无法正常表现因为它会与其他几何体相撞,这些几何体与轮胎相交。 A 简单的解决方法是隔离那个方向盘,并手动为它制作动画基于车辆的整体运动。
解决这个问题后,下一步是清理所有不必要的属性和组,并计算变形几何体的速度。由于我们只使用从撞击框架开始的破碎版本,我们可以将其与驾驶模拟中未破碎的车辆混合到那个点。

剩下的就是利用模拟几何体来获取和模拟次要效应,比如玻璃碎片、玻璃尘埃、汽车灰尘、地面碰撞尘埃和轮胎痕迹尘埃。本HIP文件包含这些二次仿真的一些中间层设置。这些设置可重复使用,可以根据需求简化或扩展为更复杂的版本。

虽然本教程主要讲解破坏效果,但文件中也包含了Solaris的设置。这包括为汽车和次级模拟器分配材质,使用哥白尼调整纹理,为不同场景摄像机设置楔形,渲染图层,以及在哥白尼中合成。欢迎大家随意探索这个文件——拆解它、研究它,或者从头重建它。

RBD 双车碰撞-houdiniUE
付费资源
RBD 双车碰撞
此内容为付费资源,请付费后查看
10积分
版本21
格式hip
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容