Skip to content

2. 基础准则

项目与文件夹结构

一个车辆项目总共由 5 个模型组成,包括高精度模型、3 个附加的细节层次(LOD)模型以及一个低面数的碰撞体。源文件的命名必须与当前车辆的品牌/型号保持一致。 推荐按以下方式设置你的项目文件夹:

p007_X0

.ini 文件由 AC Editor 创建,其中包含模型的对象属性和着色器属性。名为 texture 的文件夹是必不可少的,编辑器需要通过它来加载纹理文件。 .kscp 文件是由 AC Editor 创建的项目文件。

预算

在大多数情况下,建议采用以下三角形数量。 外部: LOD A 外部:125,000 个三角形 LOD B 外部:20,000-25,000 个三角形 LOD C 外部:10,000-12,000 个三角形 LOD D 外部:2,000-3,000 个三角形(在能保留主要形状的前提下越低越好) 内部: HR Cockpit:125,000 个三角形 LR Cockpit:7,000-10,000 个三角形 LOD B 中的 LR Cockpit:4,000 个三角形(在保持不错质量的前提下越低越好) LOD C 中的 LR Cockpit:2,000 个三角形(车窗线以上必须保留一些细节) 当然,这些数字只是通用值,适用于大多数拥有精细内饰的封闭座舱车型。 座舱狭小的开轮式赛车可以为内饰使用更少的三角形,把更多预算用在外部细节上,例如发动机和悬挂。如何根据模型的复杂程度来分配这份预算由建模师自行判断,但必须在不损害整体质量的前提下尽可能优化。 在制作 LOD 时,要遵循的最重要的准则是减少绘制调用(draw call,即对象数量)以及单独材质的数量。例如,LR 内饰应当只使用 1 种材质,但如果有可自定义的部分(例如不同的内饰颜色选项),也必须能够在 LR 内饰模型上使用定义该颜色的 detail 纹理。 到 LOD C 时,材质和对象的数量应当大幅下降;而对于 LOD D,最多只能使用 2 种材质和相近数量的对象(不需要转动的车轮)。 下面是一些在 LOD 步骤中网格逐步简化的示例:

p009_X0

p009_X1

同样的准则也适用于内饰:

p010_X0

p010_X1

非常重要:

注意:请记住,LOD B 会在 15 米或更近的距离上可见。如果你做出了精良的 LOD B,就可以缩短 LOD A 切换到 LOD B 的距离, 从而提升游戏性能。 为了做到这一点,应尽量精简模型,同时保持会产生明显反射的弯曲部件平滑,例如玻璃或车身的曲面部分。在游戏中观察实际效果并加以打磨。LOD 之间的切换必须尽可能平滑,不出现任何可见的“跳变”。 在 LR Cockpit 上,你必须让最显眼的部分保持相对精细,以确保切换平滑。在封闭座舱车型上,这包括仪表台顶部以及侧窗和后窗周围的框架。在开式座舱赛车上,需要重点关注的部位通常是方向盘周围以及车手背后的区域。 注意:LOD B 和 LOD C 必须拥有各自独立的 LR Cockpit 网格,与每个 LOD 外部网格的简化拓扑相匹配。内饰网格必须与外部网格吻合,轮廓顶点必须吸附到位。不要在 LOD A、LOD B 和 LOD C 中使用同一个 LR Cockpit 网格。确保内饰网格与外部网格之间没有任何缝隙。 LOD A COCKPIT_HR 125,000 tris LOD A COCKPIT_LR 7,000 tris Cockpit HR LOD 示例 Cockpit LR LOD 示例

p011_X0

p011_X1

在 LOD A 中,座舱(见上图)有 2 个 LOD:一个是高分辨率(HR)版本,用于座舱相机和展厅视图;另一个是低分辨率(LR)LOD,用于大多数外部相机、回放以及远距离视图。 注意:HR 和 LR

p011_X2

座舱 LOD 必须 始终与外部 LOD A 相匹配,因为 行驶过程中,存在的 EXTERIOR MESH 就是 LOD A。 当相机 移得更远时, 座舱 LR 将会发生切换, 你会得到一个简化 版本的座舱, 只使用一种材质 (大多数情况下), 外观与 HR 版本非常相似。 在某些情况下,当车辆拥有提供多种颜色选项的可自定义内饰时,LR 内饰允许使用超过 1 种材质,但作为一条通用规则,请尽量将其控制在最低。

管理 LOD 的脚本

LOD 是一组随相机距离而变化的简化模型。 这一过程对于优化游戏中的帧率而言是必要的。 LOD 切换可以通过脚本来控制,该脚本名为 lods.ini,位于 AssettoCorsa/content/cars/CAR-NAME/data。该脚本包含以下值:

ini
[COCKPIT_HR]
DISTANCE_SWITCH=6 ;表示座舱 HR 切换到座舱 LR 的距离(单位:米,
如有 LR 的话)
[LOD_0]
FILE=abarth500.kn5
IN=0
OUT=15 ;表示 lod_A 切换为 lod_B 的距离(单位:米,如有 lod_B 的话)
[LOD_1]
FILE=abarth500_B.kn5
IN=15
OUT=45 ;表示 lod_B 切换为 lod_C 的距离(单位:米,如有 lod_C 的话)
[LOD_2]
FILE=abarth500_C.kn5
IN=45
OUT=200 ;表示 lod_C 切换为 lod_D 的距离(单位:米,如有 lod_D 的话)
[LOD_3]
FILE=abarth500_D.kn5
IN=200
OUT=1500 ;表示 lod_D 从视野中消失的距离(单位:米)。

注意:请核实每个 LOD 的“out”距离值与下一个 LOD 的“in”值是否匹配, 否则你的车会在切换发生之前消失。 补充信息:LOD B 必须拥有与 LOD A 相同的 null 层级,但 COCKPIT_HR、STEER_HR 和 FLYCAMS 这些 null 不应存在。根据各元素的可见程度,是否在 LOD C 中移除其他非必需的 null(例如 wings、bumpers、hood 等)由你自行判断。