欢迎光临散文网 会员登陆 & 注册

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

2023-01-02 10:16 作者:零贰02  | 我要投稿


《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 中,

会被游戏引擎拒绝掉,导致的结果就是碰撞体不起作用。因此,你必须像右侧那样,将碰撞

体的面完全缝合成一个整体。另外,还要注意那些被翻转的面,这种面也会导致问题的出现。

所以也必须将这类面翻转到正确的一侧。


补档:06.【扩展研究】物理特性和碰撞体指南的评论 (共 条)

分享到微博请遵守国家法律