补档:06.【扩展研究】物理特性和碰撞体指南

《ZM3 GTA5 导入与导出插件》技术文档
原创教程:零贰
以下是技术文档的目录:
01. GTAV 导入与导出插件的准备工作:如何安装 ZM3.1.0
02.【基础知识】GTA V:场景层级,复合物体,几何体模型
03.【使用指南】ZM3《GTA V 导入与导出插件》使用指南
04.【拓展研究】GTA V:玻璃破碎数据指南 (*.cwgv 文件)
05.【扩展研究】GTA V 着色与材质,车体效果,载具灯光,贴图等的指南
06.【扩展研究】GTA V:物理特性和碰撞体指南
写在前言,从最初撰写和翻译第一篇《ZM3 GTA V 导入与导出插件》指南的 8 月 16 日,到
今天,经过 10 天的时间,总算把总数为六篇的插件指南编写完了。全部指南涵盖了制作一
个 MOD 所需的大部分知识,只要你对 MOD 有兴趣,认真研究一下的话,都可以做出优质
的 MOD。
06. GTA V: Physics and collision guide.
06.【扩展研究】GTA V:物理特性和碰撞体指南
原创翻译:零贰
载具的物理特性来自于一个或多个碰撞体(collision)部件,包括质量,体积和模型表层参数
(碰撞体代表的材质特性)。
碰撞体是一个包围在车体外部的低模多边形,游戏通过检测它,来感知载具的体积。没有碰
撞体,你的角色可以直接穿过载具或者载具穿过建筑,显然这是错误的,很可能会导致游戏
崩溃。在游戏中,不仅仅载具有碰撞体,游戏内的建筑,植物等等都是有碰撞体包裹的,这
里我就不再详细阐述了。
你可以给载具的多个部件赋予不同的碰撞体,但是部件的体积不能超过碰撞体。举例来说,
当你为车体框架,车门和保险杠赋予碰撞体的时候,基本上不会为悬浮的部件,小部件,装
在保险杆上的升级部件和行李箱赋予碰撞体。
另外,当一些部件已经被包含在一个较大的碰撞体内,那么这个碰撞体也可能足够包容附加
在这个部件上的小物件。譬如:载具上的一个名为“bodyshell”车体外壳的部件,它并没有被赋予到碰撞体,但是载具的“chassis”车身框架是有被赋予碰撞体的,而且这个碰撞体的体积
足够大,完全可以容纳这个“bodyshell”部件。那么就没有必要为它再次制作一个碰撞体了。
只有几何体模型才能被赋予碰撞体文件。在你导出载具之前,必须确保层级面板中,所有的
部件都必须包含在碰撞体内。当然也要包含尾灯,倒车灯,大灯,警灯这些小部件。
碰撞体的数据
你的碰撞体可以是多边形几何体,也可以是一个没有实体的虚拟体。你可以使用长方体,圆
柱体,胶囊状和球体来制作几何体类碰撞体模型,除了圆锥体外。虚拟体类的碰撞体则必须
以中心点为依据。在为形状复杂的载具制作碰撞体时,可以由数个简单造型的碰撞体拼接组
成,或者由多个虚拟体类碰撞体拼接成组。
为了将碰撞体和所包含的部件建立对应的联系,你需要为你的碰撞体命名一个和部件相同的
名字,只是在碰撞体名字的后面加上“[col]”标签。譬如,你要为载具的左前门“door_dside_f”
赋予一个碰撞体,那么你的碰撞体名字就是:“door_dside_f [col]”。这样,游戏引擎在渲染时
就会将这个碰撞体辨识为左前门的碰撞体。

另外,你也可以将这个左前门的碰撞体放置到复合体部件中,将它归类为碰撞体声明里(COL
state)。这样这个碰撞体和左前门一起组成了一个复合体部件,这个复合体部件便可以即作
为 LOD 文件,又可以作为碰撞体文件。

不过,当你把这两个合并为复合体部件后,有一个缺点,就是在你编辑的时候,它们不能被
同时显示出来,每次只能显示其中的一个。下图是一个前保险杆与它的碰撞体组合成的复合
体部件,同时点击 L0 和 COL 声明按钮后,在场景内,依旧每次只能看到其中一个模型。


像前面说的,碰撞体的形状越精简越好。如果载具造型复杂,那么可以使用基本的多边形搭积木一般组成载具的外观。这种基本的多边形也是面数越少越好,并且必须要是节点封闭的
多边形,这样引擎在检测的时候,才会切实的检测到碰撞体的边线。由此,也会得到一个更
好的碰撞效果。
当你导入载具时,导入的碰撞体的模型可能会丢失贴图的法线,或者依旧沿用着旧的法线,
并且看起来很平滑。为了避免这种情况,你可以勾选“Flat shaded”平滑光影渲染选项。

虽然这不是必须的,但还是建议你将所有的碰撞体部件合并成复合体部件,并且归类
到”[COL]”声明中。首先,点击“Structure”结构面板上的“[COL]”声明按钮,接着在“hierarchy”
层级列表里选择一个碰撞体模型,然后点击结构面板上的“Convert to compound”转变为复合
体部件按钮。把所有的碰撞体模型归类到[COL]声明下,并不需要太久的时间,但却可以给你
的工作带来效率。通过点击“[COL]”声明按钮,你便可以显示或隐藏碰撞体。碰撞体形状
碰撞体的类型有两种:可变形“deformable”与不可变形。大部分情况下,可变形的碰撞体用
于载具外围的部件,譬如保险杆,车门,引擎盖等。不可变形的碰撞体主要用在了内部部件,
譬如车体框架,大部分的飞机和船的主体也是用不可变形碰撞体包裹的。你可以在碰撞体的
属性面板里,通过勾选或不勾“deformable”来设定是否属于可变形碰撞体。

可变形的碰撞体必须使用节点完全闭合的多边形来制作,不能有洞,或是从一个整体上分离
出来的面。如果你需要制作复杂的碰撞体造型,那么就是用简单基础多边形来堆叠拼接成碰
撞体,然后将它们成组。
另外,可变形碰撞体必须要指定一个损坏的程度。你可以通过编辑碰撞体的节点来调整大小。
在“Structure”结构面板上按下“Damage”损坏按钮,然后保持按钮启用的情况下,编辑节点,
将节点向内收缩一段距离。要注意的是,“Damage”损坏按钮右侧有一个下拉箭头,点击它,
你会看到从 25%到 100%的四个程度。显而易见,你需要为这四个损坏程度,分别定制碰撞体的大小。如果不清楚的话,可以参照对比游戏原始载具的碰撞体,点击不同的程度,你就
可以看到区别了。下图中显示的是前保险杆在正常和损坏两种状态的模型大小。

上图中,绿色的半透明模型是原始的前保险杆模型,蓝色的是通过编辑节点,缩放后的模型。
这是一张重叠的图,仅仅用来作为对比。在 ZM 里,并没有这样的对比功能。但你可以通过
开关“Damage”损坏按钮来对比。
一部分的碰撞体它本身是带有代码编号的,这些编号代表着所拥有的物理属性。下图中,你
可以通过选择工具,将碰撞体上,车体“chassis”的多边形选中,然后在属性面板的
“General->External State -> ID”序号中,可以看到它的编号“ID”为 142,它代表着不可损坏
区域,不会和其他碰撞体发生反应。它保证了当你关车门时,车门和车窗玻璃不会“撞击”到
车体框架上。这个编号同样可以保证子弹可以穿过这个区域,然后在车门或者车窗的碰撞体
上留下痕迹。
目前我还没有完整的编号列表,你在制作时可以通过比对游戏原本的模型,来为你的碰撞体
相应的部分编号。

你也可以展开并查看下“Default Compatibility”默认兼容性选项。这些标记“Flag”一般都代表着
物体在游戏内损坏声明,告诉游戏引擎当被损坏时,物体以何种形式表现。
同样的,我暂时也还没有这些标记“Flag”所代表的意义列表,这需要你自己去挖掘。
一些最常用的碰撞体表层材质代码编号(IDs)和标记(Flags):
116 = 金属表层。当子弹撞击到这种表层时,碰撞体会渲染出火花和撞击痕迹。这钟表层同
样会生成刮擦的痕迹,当载具和其他物体碰撞时。
117 = 布料材质。通常会带有一个标记:Flag #2。
120,121,122 = 玻璃材质,分别是低硬度,低硬度和中等硬度。120 用于车门玻璃,121 一
般用于后挡风玻璃,122 用于前挡风玻璃。通常带有标记:Flag #3 和 Flag #8。
123 = 损坏不了的玻璃材质。一般用在船艇上的小窗玻璃上。通常带有标记:Flag #2 和 Flag
#3。
142 = 不可损坏区域,不会与其他碰撞体发生反应。一般用在车体框架“chassis”上。通常带
有标记:Flag #3 和 Flag #4。
基础多边形构成的碰撞体
你可以使用长方体、球体、圆柱体和胶囊状模型来转换成虚拟碰撞体,这些碰撞体的中心必须位于几何中心位置。圆柱体以 X 轴为基准,胶囊状模型以 Z 轴为基准。这些碰撞体的表层
属性所对应的代码编号和兼容性可以查看上一段的文字。

车轮的碰撞体
轮胎的碰撞体必须是要确保中心点在它的几何中心,也即 X 轴,Y 轴,Z 轴的中心。碰撞体
的尺寸可以在虚拟体属性“Dummy properties”的属性面板里进行修改。“X-scale” X 轴缩放表
示的是轮胎宽度,“y-scale”和“Z-scale”表示的是轮胎的半径。


碰撞体组合
在制作载具 MOD 时候,经常会碰到某个部件的碰撞体是由多个简单的基础多边形构成,这
种类型的碰撞体一般都是将这些多边形成组“group”。一般你可以在带有大型尾箱,开放式尾
箱的车辆上见到这类碰撞体。
目前的 ZM GTA V 插件版本还不允许对成组后的模型编辑,也包括成组后的属性。因此,你
需要首先将成组后的碰撞体解开“ungroup”,然后就可以对里面的单个模型进行编辑。在你
编辑完后,需要重新将它们成组“group”。
当这个碰撞体组是包含在复合体部件中,那么首先必须将这个复合体解散“Dismiss”。但你编
辑完单独的模型后,再在“hierachy”层级面板里选择刚才被你解散的复合体,然后重新集合
“group”它们。接着点击“COL”声明按钮,接着点击“Convert to compound”转换为复合体部件。
要注意的是,但你解组后编辑单个碰撞体模型时,你只能编辑这一个模型的属性。譬如像碰
撞体的质量属性,这个质量是碰撞体组合里面所有单个碰撞体质量的总和。因此,如果你要
修改,就必须要单独的对所有的碰撞体进行修改。


物理属性
物理属性都保存在了碰撞体的“user-defined”用户自定义选项中,双击此项目,可弹出设置面
板。点击结构面板上的“[COL]”声明按钮,当你的碰撞体和载具模型合并成了复合体部件的时
候,你需要展开列表,然后选择碰撞体文件。


质量属性是指一个物体的重量
“E”属性是一个带有 4 个数值的未知属性。我猜测他是“Energy”能量或“Energy spread”能量
扩散,但是也有可能并不是这个。这些数值控制着载具的部件在游戏的行为,包括撞击后的
变形等级,以及其他一些特别的属性。在早前的 GTA 4 插件中,这个属性是依据碰撞体的大小和边线来控制的。
修改这些数值,如果不在正确的范围内,那么就会导致载具撞击后,出现错误的变形。或是
导致可被开启的物体产生错误行为,譬如引擎盖受到轻微撞击,就可能飞走。在这个新的 GTA
5 插件中,我将这个“E”属性保留为可编辑模式,以便你可以研究并制定自己的四项物理属性
值。如果你感觉无从下手,可以去参考游戏原本的载具数据。推荐使用比较普遍的数值来填
写这四项属性,可以避免错误。

如果你在测试不同的数据时发现了问题,也欢迎你在论坛里发帖,我们可以一起探讨并尝试
解决。
正确的处理碰撞体模型的面是非常重要的。
某些碰撞体模型会有外凸的凸面,在之前的 GTA 游戏中,这些面如果没有完全缝合,引擎也
不会太在意,会忽略掉这个问题。下图的左侧是 GTA4 中车门的碰撞体,右侧是 GTA 5 中的
碰撞体。可以看到 GTA4 中的碰撞体,它的点并没有完全缝合。这种碰撞体到了 GTA5 中,
会被游戏引擎拒绝掉,导致的结果就是碰撞体不起作用。因此,你必须像右侧那样,将碰撞
体的面完全缝合成一个整体。另外,还要注意那些被翻转的面,这种面也会导致问题的出现。
所以也必须将这类面翻转到正确的一侧。


