设计车辆变形

概述

本文提供了创建车辆变形的分步指南。它以三种车辆模型为例,详细介绍了如何对它们实施销毁。重点是使用现有车辆。您需要具备 3ds Max 的高级知识,并全面了解 Dagor 引擎如何处理破坏。

插件和工具

  • Dagor 导入/导出插件。

  • Dagor 2 将顶点位置转移到顶点颜色工具

  • Dagor 2 损害设置工具 用于设置刚体销毁。

  • Dagor 2 Fast Editor 用户属性 来简化属性编辑。

  • Dagor 2 修复法线方向工具 来抢先纠正动态对象中的正常问题。

  • RayFire 插件 用于破坏玻璃和木材。

平台细节

这些示例和指南基于 War Thunder。基于 daNetGame 框架的项目将遵循相同的原则,但着色器略有不同。

版本要求

  • 至少需要 3ds Max 2021。

  • 所有示例文件均使用 3ds Max 2024 创建。

车辆变形和破坏的一般概念

关键约束

单个 Dagor .dag 模型文件的主要限制是只能存在 一个可变形对象。如果存在多个可变形对象,引擎将通过边界框确定最大对象的优先级,如 logs 中所示:

43.52 [E] multiple nodes with dynamic_deformed shader in instance, choosing the biggest one

刚体(不可变形)对象限制为 每个模型几百个。 在设计阶段,应识别并分离这些刚性物体,以达到所需的破坏效果。在实际车辆销毁过程中视觉上分离或材料(例如,车轮、木栅栏、玻璃、塑料板)明显不同的对象必须按材料类型隔离到单独的组件中。

准备用于销毁的模型

导入模型

导入 .dag 模型: m123_truck.lod00.zip.

要获得材质见解,请在Asset Viewer中使用纹理预览模型: <engine_root>/<project_name>/develop/assets/entities/vehicles/cars_modern/m123_truck.lod00.dag

The model with textures preview in Asset Viewer

设置图层

将场景组织成多个图层,以实现结构化的工作流程:

  1. DeformStart:包含需要变形的对象。

  2. DeformEnd:包含变形后的对象。

    Important

    请密切注意 DeformStartDeformEnd 图层中对象的命名。数量和命名必须相同。这种一致性将防止在随后合并所有可变形对象期间,最终模型中顶点顺序的索引错误。

  3. RigidObj:容纳刚性、可拆卸的组件。

  4. EXPORT:最终输出层。

对象识别

  • 绿色 1: 需要细分的可变形金属(置于DeformStart中)。

  • 蓝色 2: 需要分离以实现逼真变形的金属(如门)。

  • 棕色 3: 具有足够细节的金属,不需要细分(也在DeformStart中)。

  • 紫色 4: 刚性物体,如可拆卸组件(置于RigidObj中)。

Color identification of the model parts in 3ds Max

变形大型刚性组件

对大型刚性物体进行预变形,以提高分离后的逼真度。小部件可以保持基本完好。例如,大型轮胎应出现损坏,并应类似这种程度的变形:

Deformed vehicle tyres in 3ds Max

配置刚体组件

  1. Set Active Layer: 在RigidObj 图层中工作。

    Rigid object layer icon in 3ds Mas
  2. Launch Script: 使用 Dagor 2 Damages Setup Tool.

  3. Reset Pivots: 将枢轴重置为对象中心。

    Pivots reset to objects center in 3ds Max

脚本调整

  • materialName:t=“wood_solid” 改为 materialName:t=“metal” 以获得正确的声音和效果。

  • 将金属属性的 density:r=150 改为 density:r=250

    Dagor 2 Damage Setup properties window

应用更改

  • 选取 RigidObj 图层 1 中的所有对象。

  • 应用脚本生成精确的碰撞层次结构和用户自定义属性 2

    Selecting objects in Rigid object layer and applying the script to generate collision hierarchies in 3ds Max Generated objects collisions in 3ds Max

调整物体的碰撞框

正如观察到的那样,每个物体都会生成一个碰撞框 1,但它并不总是精确地符合物体的形状 2。因此,有必要手动调整场景中的碰撞盒,以实现精确的覆盖。

例如,在处理车轮时,根据车轮的直径调整碰撞框的大小,并通过旋转来复制碰撞框。这将创建一个近似的圆柱体形状。遗憾的是,达戈引擎不支持原生的圆柱体或球体碰撞,因此所有形状都必须使用方框来近似。 最终场景如下:

Generated collision boxes and objects in 3ds Max

Note

所有缩放、定位和旋转调整都必须在本地空间中进行。

Local Space in enabled on the panel in 3ds Max

如果不这样做,导出到 Dagor Engine 后就会出现失真和不准确的情况。事后纠正这些问题极其困难和耗时。

车轮、前大灯透镜和挡泥板等组件1是通过多个碰撞框定义的。对于复杂的形状,可使用现有的碰撞盒并对其进行修改,使其尽可能与物体的轮廓相匹配。如果一个碰撞框不够用,可根据需要添加多个碰撞框。 较简单的形状,如侧后视镜 2,通常只需一个碰撞盒即可描述。

为了简化对象属性的审查,建议使用 Dagor 2 Fast Editor User Properties 脚本。安装后,使用 Alt+Ctrl 激活脚本。对于所有选中的对象 1,它将在专用窗口 3 中显示其自定义用户属性 2的内容,从而无需通过上下文菜单单独访问这些属性。要隐藏脚本窗口,请按下 Alt+Shift 键。

完成这一步后,实体对象的配置就完成了。隐藏此图层,因为在导出前不再需要它。

配置车辆的可变形部分

首先在 DeformStart 层和 DeformEnd 层中配置对象。要实现逼真的车辆变形,模型必须有足够的细节。这通常需要对模型进行细分,以提高变形质量。例如,尝试对油箱 1 、车辆底座 2 、车轮拱罩和挡泥板 4 、挡泥板 3 和驾驶室 5 进行变形时,如果没有足够的三角形进行适当的变形,就会出现问题。即使是单独的部件,如车门 6 也需要进行细分。

View of model deformable parts in 3ds Max before tesselation in 3ds Max

分割后,模型的三角形总数不应超过 65 000 个。经过正确细分的车辆应大致如下:

View of model deformable parts in 3ds Max after tesselation in 3ds Max

遗憾的是,并没有严格的分割规则。一个好的建议是每隔 20-30 厘米切割一次,在视觉质量和三角形数量之间取得平衡。在不影响变形质量的前提下,尽量减少三角形数量。最佳的平衡点需要在对 3-4 个模型进行变形后积累经验。

接下来,将DeformStart层的所有对象复制到DeformEnd层。密切关注命名规则。确保命名的一致性对于日后组合部件时保留顶点索引至关重要。 在初始模型(未变形)和最终模型(完全变形)之间匹配顶点索引至关重要。隐藏DeformStart层,因为该层包含未变形模型版本,只有在工作流程结束时才需要将顶点位置数据烘焙为顶点颜色。验证所有名称和对象序列是否一致:

Copying all objects from the DeformStart layer into the DeformEnd layer in 3ds Max

在此阶段,您可以开始变形了。在开始每个变形步骤之前保存场景。结果可能并不总是符合您的预期,回滚通常更容易。为安全起见,可考虑将撤销步骤设置为至少 300-400 步。不过,定期保存更可靠,因为在较深的撤消操作过程中,3ds Max 可能会意外崩溃。

变形过程

车辆变形包括在顶点上使用软选择来创建逼真的皱褶效果。从较宽泛的调整开始,边调整边完善。 例如

  • : 在变形前打开或部分打开车门。在车辆碰撞时,车门几乎总是打开或部分脱落。

  • 易碎部件: 分离脆性部件,而不是使其变形。

最初,对所有对象应用FFD(自由形态变形)修改器进行粗略调整:

Appling an FFD (Free Form Deformation) modifier to all objects for rough adjustments in 3ds Max

然后仔细变形各个车辆元素:

Deforming individual vehicle elements in 3ds Max

合并图层

变形完成后,合并DeformStart层中的所有部件,然后对DeformEnd层进行同样的操作。合并时,确保按数字顺序附加对象(例如,按顺序附加到对象 *000)。这一步对于保持顶点索引的一致性至关重要。结果将是两个不同的模型 - 变形和未变形。为方便起见,将每个模型的支点移动到场景中心,然后执行重置变换。这一步有助于防止导出过程中可能出现的法线问题。Dagor 2 固定法线方向工具 等工具或 3ds Max 的内置工具都可以帮助完成此操作。现在场景应显示如下:

Moving the pivot point of each model to the center of the scene and performing a Reset Transform

将顶点位置转换为顶点颜色

运行 Dagor 2 将顶点位置转移到顶点颜色工具脚本。选择未变形模型,在Pick Source Object字段中将变形模型设置为源对象,然后单击Transfer Vertex Position to VColor! 这将把变形模型的顶点位置变化映射到未变形模型的顶点颜色通道中。检查顶点颜色通道,确认其中包含数据。现在,未变形模型的外观应与此相似:

Maping the deformed model's vertex position changes into the vertex color channel of the undeformed model

顶点颜色的强度表示变形的程度–较强的变形会产生更鲜艳的颜色,而最小的变形则更接近灰色。这一步验证了将位置数据转换为顶点颜色的成功。变形模型不再需要,可与 DeformEnd 层一起隐藏。

分配自定义用户属性

为未变形模型分配以下自定义用户属性,以确保在达高引擎中的正确行为:

animated_node:b=yes
physObj:b=yes
collidable:b=no
density:r=15500
massType:t="none"

density:r=15500参数根据车辆类型进行设置。对于重型车辆,请使用值~15,500;对于乘用车,通常介于 5,0007,000之间的值。

Setting the Dagor 2 Fast Properties tool parameters

最终场景设置

完成常规场景配置,确保机体在 Dagor Engine 中正确交互。车身必须作为物理对象正确运行,并在发动机内按预期响应。

辅助碰撞对象

为了确保可破坏车辆模型与坦克或其他车辆之间的正确交互,需要向场景添加辅助碰撞箱。 这些对象的设计类似于标准碰撞箱,但必须附加The Attaching icon到车辆的主要可变形体上。

Collision boxes of the model parts in 3ds Max
  • Bumper 1 和 External Platforms 2: 确保将分离的车轮正确推离主体。

  • Stepped Base: 使车轮直径较小的轮式车辆能够在视觉上爬升到车辆的变形部分。

  • Box 3: 模拟掉落的玻璃碎片分散 向外。

  • Cabin (large deformation): 通过制造更大的物理障碍物来防止坦克进一步行驶。

  • Box Set 4: 有助于与车辆后部的体件正确交互。

  • Rear Platform Box 5: 用作车辆后部较小碎片的支撑平台。

  • Diagonal Boxes (bottom): 防止车辆像平板一样平地着陆,而是允许自然倾斜的跌落。

Tailored auxiliary collision boxes of the model parts in 3ds Max

每辆车都需要定制的辅助碰撞箱。

分配动态材质

由于我们从静态模型开始,因此需要将其材质转换为动态材质以实现变形。动态车辆部件需要特定的着色器,与静态着色器不同。将 Dagorrat Material 1 分配给车辆的可变形车身。使用以下设置:

Assigning Dagorrat Material 1 in Material Editor
  • 1 Material Name: 为清楚起见,请使用描述性命名。

  • 2 Material Class: 设置为 dynamic_deformed 以指定着色器类型。

  • 3 Slot 0: Albedo texture.

  • 4 Slot 2: 具有金属度(B 通道)和平滑度(A 通道)的法线纹理。

  • 5 Slot 7: 损坏的金属反照率纹理,在 Alpha 通道中出现裂缝/遮罩。

  • 6 Slot 8: 损坏的金属法线贴图,与插槽 2 的打包方式相同。


接下来,使用以下设置为实体对象分配 Dagorrat Material 2

Assigning Dagorrat Material 2 in Material Editor
  • 1 Material Class: dynamic_simple.

  • 2 Slot 0: 车辆的Albedo纹理。

  • 3 Slot 3: 打包的 normal/metalness/smoothness 纹理.


Dagorrat Material 2 分配给 RigidObj 图层中的所有非碰撞对象。

See also

有关具有分层材料的复杂模型的更多信息,请参阅代理材料.

导出车辆

若要导出完成的车辆:

  1. 选择 DeformStartRigidObj 图层中的所有对象。

  2. 将它们移动到 EXPORT 图层并使其处于活动状态。

  3. 使用以下 Dagor exporter 设置进行导出:

    Group of Dagor Exporter Settings labels
  4. 将输出文件另存为(覆盖): <engine_root>/<project_name>/develop/assets/entities/vehicles/cars_modern/m123_truck_destr.lod00.dag

准备导出场景: m123_truck_destr_deform.zip.

测试模型

  1. Asset Viewer 来测试其销毁机制。

    Model in Asset Viewer
    • 选择车型 0.

    • 设置物理引擎 1.

    • 开始模拟 2.

      Steps for starting the simulation process in Asset Viewer

      如果发生错误(通常与着色器相关),请检查控制台日志 The Console icon

      Tip

      如果问题仍未解决,请通过 a.vlasov@gaijin.team 联系本文档的作者。

  2. 使用上下文菜单中的 Export All (PC) 选项将资源导出为 Dagor 二进制格式:

    The Export All (PC) option in Asset Viewer menu

    要在导出过程中禁止显示来自旧文件的警告,请将以下块添加到application.blk

    logerr_to_con{
      AssetViewer{
        exclude_re:t="(warning: node <occluder_box> from)|(Shader 'simple_aces' not found in bin dump)|(Shader 'simple' not found in bin dump)|(Shader 'land_mesh_combined' not found in bin dump)|(has mesh with 0 faces)|(degenerate tri)|(degenerate mesh node)"
      }
    }
    

    这将允许忽略未找到过时着色器的警告。 确保构建后控制台中没有错误:

    The Asset Viewer console output
  3. 修改位于<engine_root>/<project_name>/develop/gameBase/config/目录下的rendinst_dmg.blk中无人机的销毁配置:

    m123_truck{
     physRes:t="m123_truck_destr_phobj";
     hp:r=40;
     impulseThreshold:r=3;
     dmPreset:t="metal_light_explosive_props";
     fx:t="ad_car_wreck";
     fxScale:r=1;
     material:t="metal";
    }
    

    以下是配置销毁属性的关键参数的说明:

    • m123_truck: 将可销毁的主要对象的名称。

    • m123_truck_destr_phobj: 从m123_truck_destr.lod00.dag 生成的虚拟对象的名称。这表示对象的可破坏版本,是到目前为止概述的过程的结果。

    • hp:r=40: 指定发生破坏的 HP 阈值。当物体的 HP 低于此值时,它会解体。

    • impulseThreshold:r=3: 定义触发销毁所需的冲量力。例如,如果碰撞或撞击的力大于此值,则会导致对象破裂。

    • dmPreset:t="metal_light_explosive_props": 要使用的销毁模型预设。这决定了破坏行为,包括碎片生成和动力学。

    • fx:t="ad_car_wreck": 指定要在破坏事件期间使用的粒子效果。例如,这可能表示销毁对象时触发的爆炸视觉对象。可以在此文件中查看其他粒子效果,并根据需要进行替换。

    • fxScale:r=1: 调整爆炸效果的比例。此参数可能需要微调以匹配要销毁的车辆或对象的大小。

    • material:t="metal": 此关键参数将覆盖 .dag 文件中定义的材质设置。例如,如果 .dag 文件中的 自定义用户属性 指定了 materialName:t="wood",但此文件指定了materialName:t="metal",则用于销毁部件的材料将是 metalAlways remember此参数优先于内部 .dag 设置。

    根据需要调整参数,例如,粒子效果、爆炸缩放或材质覆盖。

    Important

    通过仔细调整这些参数,您可以定义车辆在破坏事件期间的行为方式,包括材质属性、效果和分离阈值。

  4. 使用 create_vfsroms.bat重建 vfsrom。

    See also

    有关详细信息,请参阅 资源构建.

    Tip

    如果您遇到任何错误或对本文档有疑问,请直接通过 a.vlasov@gaijin.team联系作者。

在关卡中放置和测试车辆:

  1. daEditor 中打开关卡: <engine_root>/<project_name>/develop/levels/avg_proto/apex_test_scene/apex_test_scene.level.blk.

    The level opened in daEditor
  2. 使用顶部菜单将关卡导出为二进制格式。成功导出后保存关卡。

    The Export to Game (PC format) option in daEditor menu
  3. 下载测试任务: test_01_car.zip.

  4. 将它放置到: <engine_root>/<project_name>/develop/gameBase/gameData/missions.

  5. 打开 任务编辑器,选择测试任务,然后开始游戏 The Play icon.

    The Mission Editor panel

Note

在测试期间,控制台可能会显示许多与资源不匹配或构建的资源不足相关的错误。但是,这些错误对于测试目的并不重要。

The daEditor console output during testing

如果出现 assert 错误,最初尝试按 Ignore 按钮来忽略它们。

如果一切都设置正确,您应该会在环境中看到一个坦克,它可以用来与测试卡车碰撞。

Tip

如果问题仍未解决,请通过 a.vlasov@gaijin.team联系本文档的作者。

微调车身的变形参数

为了实现逼真的车辆变形,可以在 3ds Max 的车身材质中配置特定参数。这些设置会影响着色器,并允许精确控制变形行为。以下是参数及其用途的详细列表:

着色器参数

  • diffuse_tex_scale=1: 控制损伤纹理的albedo的比例。 根据车辆的大小进行调整。

  • normals_tex_scale=1: 类似于diffuse_tex_scale,这会影响 normal/metalness/smoothness纹理比例。

  • diffuse_power=1: 确定albedo损伤纹理的强度。默认值: 1.0.

  • normals_power=1: 控制normal/metalness/smoothness损伤纹理的强度。默认值: 1.0.

  • max_height=1.2: 最大变形高度的乘数。默认烘焙值为 ‘1.0’。增加(例如,’1.9’)以表示较大的变形。

  • springback=0.05: 定义金属在变形后向后弯曲的程度。 值越高,恢复效果越好。

  • expand_atten=0.5: 设置变形扩展的范围,以模拟材质特性。

  • expand_atten_pow=0.5: 调整变形期间的压力曲线,从而影响材质在力下的弯曲方式。

  • noise_scale=1.0: 添加程序变形噪波。较大的模型需要较小的值才能获得真实感。

  • noise_power=1.3: 放大动态变形的程序噪波强度。

  • crumple_rnd=0.5: 随机化褶皱强度,仅在动态交互期间可见。

  • crumple_force=0.1: 确定动态交互期间的褶皱力。

  • crumple_dist=0.5: 指定碰撞期间的褶皱效果距离。

在游戏中测试参数

要有效地测试这些参数,请执行以下作:

  1. 启动游戏并模拟交互(例如,坦克从卡车上行驶)。

  2. 使用“P”暂停游戏,然后使用“F2”打开游戏内编辑器。

  3. 导航到 dynamic_deform 菜单:

    The Dynamic Deform menu in game
    • 确定测试车辆车身 2 的坐标 1

      Identifying the coordinates and the test vehicle body in daEditor
    • 将坐标输入变形测试块,使测试箱与车辆对齐。

      Inputting the coordinates into the deformation testing block to align the test box with the vehicle
  4. 调整测试变形框:

    • 启用复选框以可视化变形。

      Enabling the Debug and Debug Draw checkboxes in DynamicDeform menu
    • 使用滑块纵变形框并动态观察效果。

      Using sliders to manipulate the deformation box

    Tip

    每次测试后,始终使用 The Clear All button 重置无人机以进行进一步迭代,以清除变形。

Important

要使变形框正常工作,请确保它与可变形对象的 边界框 相交(由红色高亮显示表示)。 未对准可能会阻止参数应用。

Ensuring the deformation box intersects with the bounding box of the deformable object

在 3ds Max 中优化参数

确定最佳设置后:

  1. 在 3ds Max 中调整车辆材质属性中的参数,如max_height(例如1.5)和noise_power(1.0)。

    Adjusting the Max Height and Noise Power parameters in Material Editor
  2. 按照前面概述的步骤重新导出模型。

  3. 在游戏中测试更新后的模型,并根据需要进行迭代。

迭代调整和增强

测试通常会揭示需要改进的领域,例如挡风玻璃破损等缺失的组件。可以在后续迭代中添加和微调这些元素。

阴影和着色调整

车辆可能包含随机颜色着色以增加多样性。这是使用 rendinst_simple着色器。

See also

For more information, see Procedural Rendinst Painting.

use_paintingpainting_line 的参数可以与 shader dynamic_deformed** 参数在同一位置指定,如下所示:

Specifying the Use Painting and Painting Line parameters

这可确保 Painting Line 在 shader 配置中的正确集成和行为。

Important

确保静态着色器设置与其动态对应项匹配,以避免不一致。

模拟碎玻璃

要添加碎玻璃:

  1. 从“.dag”文件中提取原始玻璃模型。

  2. 使用 RayFire 进行压裂:

    • 设置断裂参数以生成径向断裂模式。

    • 删除过小的片段以优化仿真性能。

      Using the RayFire plugin for 3ds Max for fracturing

      Tip

      将玻璃碎片的数量保持在 100 以下,以防止过多的物理计算。

      Glass fragments in 3ds Max
  3. 对于每个片段:

    • 单独的正面三角形。

    • 将枢轴调整到中心以准确生成碰撞。

      Separating front-facing triangles and adjusting pivots to the center for accurate collision generation in 3ds Max
  4. 应用轻微的 Noise 修饰符 以获得真实感,然后为玻璃碎片分配一个动态着色器:

    Applying the NoiseModifier in 3ds Max
  5. 修改 rendinst_pbr_glass 着色器为 dynamic_pbr_glass:

    Changing the Rendinst Pbr Glass shader to Dynamic Pbr Glass shader in 3ds Max
  6. 将其分配给所有可用的玻璃碎片,与 Dagor 2 Damage Setup Tool 产生碰撞:

    The Dagor 2 Damages Setup Tool option in Gaijin Tools menu in 3ds Max Generating collisions with Dagor 2 Damages Setup Tool

    如你所见,所有 bbox 都有自己的粗细。

导出最终模型

完成变形和其他增强功能后:

  1. 将模型保存为 m123_truck_destr.lod00.dag.

    Saving the model
  2. 使用前面部分中概述的步骤重新构建和测试游戏中的资源。

最终测试

完成的场景应包括变形行为和其他功能,如碎玻璃。要进行调整,请迭代 3ds Max 场景并在游戏环境中进行测试,直到获得所需的结果。

下载最终的 3ds Max 场景: m123_truck_destr_deform_final.max.

示例:使用大型坦克摧毁车辆

首先,从存档中导入模型: zis_6_bz.zip.

这里的主要挑战是单独使坦克变形。在破碎过程中,坦克不仅会垂直压缩,还会水平膨胀。卡车的驾驶室也应分离成一个不同的对象。在变形之前,场景应大致如下所示:

Separating the tank and the cabin from truck body in 3ds Max

在评估车辆的结构时,请注意挡泥板等元素与驾驶室不同,就像车门、油箱和油箱的护栏一样。关键是要考虑这些部件的不同刚度。因此,将它们作为单独的对象进行变形。车辆的内部组件也应根据材料的刚度分为多个部分。下图说明了此分段的颜色编码示例:

Color-coded example of the segmentation in 3ds Max

接下来,像以前一样,应用 FDD 修改器以单独变形每个对象。 在初始粗略变形后,场景将如下所示:

Applying FDD modifiers to deform each object individually in 3ds Max

考虑到坦克的大小,变形坦克是最复杂的任务。下面是一个部分变形的坦克示例:

The first example of a partially deformed tank on a real truck The second example of a partially deformed tank on a real truck The third example of a partially deformed tank on a real truck

在此初始变形之后,使用 **Soft Selection (软选择) 手动微调形状。生成的变形车辆应保留逼真的折痕和折叠。坦克颈部的变形最小,而锋利的边缘则显示出与模型细节水平一致的褶皱。水箱在来自上方的压力下水平膨胀,在颈部周围形成自然的放射状褶皱。精制后的水箱详细外观如下:

Top view of the detailed appearance of the tank after refinement in 3ds Max Front view of the detailed appearance of the tank after refinement in 3ds Max Side view of the detailed appearance of the tank after refinement in 3ds Max

物理调整后测试

  • Wheels 1: 略微倾斜以自然地从车身上分离并滚动。

  • Ejection Boxes 2: 添加以防止车轮穿过油箱护栏。这些盒子将轮子向外推,从而产生更自然的运动。

  • Rear Wheel 3: 设计为与其组件的一部分一起拆卸。添加了额外的碰撞箱以复制圆形轮子的行为,从而提高了真实感。

  • Flat Tire 4: 包括一个碰撞箱,用于在车辆坠落时倾斜车架。这里特意使用了一个碰撞箱来放大影响。

Side view of model collision boxes in 3ds Max Back view of model collision boxes in 3ds Max

关于质量与时间限制的注意事项

平衡时间和质量至关重要。虽然水箱可以具有更高级的细节,例如破裂或裂缝,但此类改进需要投入大量时间。所选方法旨在实现细节和效率的最佳平衡。

具有修改器堆栈和详细设置的场景: zis_6_bz_deform_modificators.zip.

最终场景,通过改进的碰撞设置和其他调整为导出做好了充分的准备: zis_6_bz_deform.max.

示例:使用大量塑料部件销毁车辆

此示例演示了包含重要塑料组件 (如保险杠和面板) 的车辆模型的销毁。塑料的行为与金属不同,通常会弯曲、弹回或完全在压力下脱落。以下是准备和模拟此类销毁的分步指南。

下载模型: arctic_tayga_patrul_551.zip.

初始检查

  1. 确保适当的规模

    • 验证模型没有负缩放,并且所有缩放值均为 1.0

      Warning

      确保正确的规模对于管道至关重要。如果跳过此步骤,则以后可能需要从头开始重做所有内容,因此请提前解决。

  2. 检查模型结构

    • 这个特定的模型相对较新,因此没有缩放问题。 但是,较旧的型号可能需要调整。

组件分离

  • 首先将 玻璃 和其他 刚性物体 分开(例如,面板、保险杠等可拆卸塑料部件)。

  • 保护性透明面罩等物体通常具有复杂的形状。 生成碰撞后,手动调整其位置和大小以实现准确表示。

目标是实现在碰撞过程中可能分离的刚性零件的真实分解。示例结果:

Example of a realistic breakup of rigid parts that can detach during collisions

导出和初始测试

  1. 为分离的元件分配适当的材料。

  2. 将当前设置导出到游戏中,不向主体添加变形。

  3. 评估游戏内外观:

    • 刚性部件在交互过程中应干净地分离。

    • 应适当填充或掩盖大间隙(例如,来自分离的面板的间隙)。

初始导出后的示例结果:

Example result after initial export in Asset Viewer

具有已完成的刚体对象和材质的场景的中间阶段: arctic_tayga_patrul_551_deform_Rigid_Body_done.max.

完善模型

添加内部结构

塑料面板通常覆盖空白空间。要掩盖这些差距,请执行以下作:

  1. 复制 可变形面板 并调整其位置。

  2. 使用这些副本创建一个 近似内部框架

    • 从现有材质库中分配深色纹理以模拟深度。

    • 确保面板分离时基础结构在视觉上是连贯的。

      Making an approximate internal frame
  • Side Panels 1: 这些本质上是车辆的挡泥板,也应分为不同的实体。在变形过程中,它们会从主体上分离,露出下面的黑色底座。

  • Dashboard and Plastic Covering 2: 将这些提取到单个实体中,以便单独处理。

  • Black Base 3: 将底座以及驾驶员和乘客座椅作为不同的实体分开。

根据标准做法,进一步分离由于金属或材料刚度的差异而独立变形的零件。这确保了根据每个组件的特定属性量身定制的逼真的变形过程。

Warning

  1. 在此阶段,请勿修改平滑组或法线。对这些属性的调整将更改顶点索引,从而导致变形过程中出现错误。

  2. 始终将模型保持为 可编辑网格。避免在“Edit Poly(编辑多边形)”和“Edit Mesh(编辑网格)”之间进行转换,以保持顶点的一致性。

导出的最终场景

完成内部结构和刚体设置后:

  1. 微调塑料和金属部件的材质和着色器。

  2. 在游戏环境中测试模型,验证分离和变形行为。

  3. 将模型导出为最终的 “.max” 文件: arctic_tayga_patrul_551_deform.max.

示例:使用 Canvas 和 Fabric 组件销毁车辆

在本节中,我们将探讨准备带有织物和帆布元素的车辆以进行动态变形和破坏的过程。重点将放在分离、精炼和变形组件上,例如木制支架、金属部件和织物材料。

下载基本模型: renault_ahn.zip.

初始检查

  1. 检查变换设置

    • 检查负缩放或不均匀的缩放值(例如,不等于 ‘1.0’)。

    • 不正确的变换可能会导致在导出到动态模型后出现反转法线和其他问题。

    缩放比例不正确的示例:

    Example of incorrect scaling in 3ds Max
  2. 校正变换

    • 将车身附加到临时盒体对象。

    • 分离框并将 Pivot 重新定位到原始位置,通常为 ‘[0, 0, 0]”。

    Important

    在继续之前,请确保对缩放值进行规范化。在变形和设置调整后解决这些问题可能非常困难。

    正确转换示例:

    Example of correct transformation in 3ds Max

准备帆布和木制支架

木制部件

  1. 分离木质元素

    • 识别座椅靠背、木板和其他木制部件。

    • 使用RayFire 插件将它们分割成更小的碎片:使用模拟自然木材破损的裂缝设置。

      Identifying seatbacks, planks, and other wooden model components Splitting them into smaller fragments using RayFire plugin in 3ds Max
  2. 压裂细节

    • 将每块木板分成 2-3 块(以满足每个 ‘.dag’ 文件 100 个对象的限制)。

    • 应用 Noise 修饰符 来模拟分裂的边缘。

      Dividing each plank into 2-3 pieces to meet the 100-object limit per .dag file in 3ds Max

金属部件

安装不变形的金属部件

  • 座椅支架和角支架等金属元件应保持刚性(在下图中以红色突出显示)。

  • 将它们与主体合并,并为它们分配金属材质以实现正确的变形行为。

    Metal model elements that should remain rigid are highlighted in red in 3ds Max

组织可变形对象

将车辆划分为逻辑变形组:

  1. Side Panels 1: 这些应该表现得像铰链门,在碰撞时弯曲和打开。

  2. Fuel Tank 2: 比车身框架更坚固;必须单独变形。

  3. Wheel Discs 3: 由于其圆形,应该具有独立的变形逻辑。

  4. Front Fenders 4: 与棱角分明的机舱结构相比,它们的圆形设计需要独特的变形参数。

  5. Rear Mudguards 5: 它们具有不同的密度,需要单独的变形行为。

Dividing the vehicle into logical deformation groups in 3ds Max

模型的中期准备阶段: renault_ahn_a_deform_ready_to_deform.max.

使用 FFD 进行初始变形

应用粗略变形

  • 使用 FFD 修改器 来模拟大规模的弯曲和挤压。

  • 在此阶段测试变形,以确保合乎逻辑的破损模式。

粗变形后的结果:

The right side view of result after rough deformation The left side view of result after rough deformation

粗变形后的场景: renault_ahn_a_deform_FFD_done.max.

详细变形

完成变形细节

  • 使用 Noise修饰符手动调整 添加更精细的细节,以模拟逼真的挤压和弯曲。

  • 确保没有重叠的几何体或不自然的拉伸。

最终详细的变形结果:

The side view of final detailed deformation result The front view of final detailed deformation result

细节变形后的场景: renault_ahn_a_deform_all_deformation_done.max.

为画布分配材质

要精确模拟画布(帐篷),请创建具有特定变形属性的独特材质:

分离画布材质

  • 使用深色纹理进行初始测试。

  • 修改画布的变形参数:

    • 禁用变形纹理的混合。

    • 增加恢复行为以模拟织物的回弹特性。

画布的材质设置示例:

Example of material setup for canvas

最终测试和导出

  1. 游戏内测试

    • 验证游戏中的变形和恢复行为。

    • 根据观察到的结果调整着色器参数。

  2. 导出最终模型

    • 测试后,导出完整的设置以集成到游戏中。

最后场景: renault_ahn_a_deform.max.

通过执行这些步骤,你将获得一个可破坏的车辆模型,该模型对刚性和柔性组件都具有逼真的行为,包括正确处理木制和织物元素。