# OBJ 列车模型 NTE 支持通过资源包添加以 OBJ 格式模型文件为模型的列车。 ## 基本格式 通过 NTE 使用 OBJ 列车模型时,在 `mtr_custom_resources.json` 文件中的写法与使用 BBMODEL 并无不同。 ```json { "custom_trains": { "lu1995": { "name": "LU 1995", /* ... 其他配置和使用 BBMODEL 时相同,省略 */ "texture_id": "minecraft:textures/misc/white.png", "model": "mtr:lu1995/modeltrain_1995_tube_train.obj", "model_properties": "mtr:lu1995/properties.json", "flipV": true } } } ``` - `model`: 填入 OBJ 文件的资源位置,这和使用 BBMODEL 时区别不大。 - `model_properties`: 填入模型属性文件的资源位置。 - `texture_id`: 替换贴图的资源位置。 使用 OBJ 模型时贴图是从 OBJ/MTL 里指定的,但是如果在模型文件里写死更换涂装就不方便。为此 NTE 特别设定,如果使用了一个文件名为 `default.png` 的贴图,它将被替换为 `mtr_custom_resources.json` 中 `texture_id` 的设定值,以便更换涂装。 如果 OBJ/MTL 中没有使用任何名为 `default.png` 的贴图,那么 `texture_id` 的设定值将没有任何作用。不过,如它不存在 MTR 会报错,所以可以将它设定为任意的实际存在的贴图文件,例如 `minecraft:textures/misc/white.png`。 - (可选) `flipV` (V大写) 设为 true 将把 OBJ 模型加载改为适配贴图 V 坐标正方向向上的导出方式的模式。 导入模型、设定贴图、设定渲染批次等的方法参见 [OBJ 模型相关适配](objschem.md) 。 您使用的 OBJ 文件应当符合:相对于列车出库时的前进方向,X 轴正方向向左,Y 轴正方向向上,Z 轴正方向向前。每个单位长度为 1m。在模型属性文件里,左侧门是指 X 轴正方向的,右侧门是指 X 轴负方向的。 注意:所有文件名都需要是全小写,文件名只可有 a-z、0-9、`-`、`_`。 ## 示例文件 一个示例资源包可在 [此处](assets/mtrnte-example.zip ':ignore') 下载。 ## 模型属性 MTR 有一个 **模型属性** JSON 文件,里面可指定哪些部件在开门时要移动、还可以指定哪些部件只在第几号车显示、哪些部件只在门开时显示等信息,来实现开门动画、门灯、及头尾车显示车头的部件中间车不显示车头的部件等功能。 可以使用 MTR 自带的资源包创建器来编辑模型属性文件。在资源包创建器的选项中,点击 "Blockbench 文件" 右侧的 "上传",然后拖入您想使用的 OBJ 文件即可。如果想进一步编辑已有的属性文件,可选择属性文件,否则留空即可。 OBJ 内的部件会被自动解析,然后即可在模型属性文件里使用。这和 BBMODEL 内的部件用法相同。 您可以看到您上传的 OBJ 模型及其包含的部件。您可对部件进行选择,并进行门动画等设置。您可能发现您的 OBJ 模型是没有贴图的白色,这是正常现象,在资源包创建器中 NTE 不载入贴图。 **请您预先合并部件,如将所有不动的部件合并为一个。部件越多性能越差。** 编辑完成后,请到选项中任意选择一张图片作为纹理文件,然后点击 ''导出资源包"。您可在导出的压缩包中找到模型属性文件。它是在内部一个文件夹里,和一个 BBMODEL 文件同一级下的一个 JSON 文件。 虽然您大概不会同时使用两种方法,在模型属性里对部件设置的渲染阶段设定(`exterior` 之外)比通过 OBJ 材质名称设置的更优先。 注意:此处导出的资源包只能用于获得模型属性文件。其内容不全,不可在 Minecraft 中使用。 ## 不同车厢不同模型 MTR 原版中列车的所有车厢都使用同一模型,然后根据模型属性文件的设定对于各个车显示或隐藏车头等特定部件,来使各车显示外观不同。 这不太符合 BVE/RTM 等的开发习惯,在这些平台上各个车厢使用不同的模型。因此 NTE 对此添加了特别适配,可在 `mtr_custom_resources.json` 中的 `model` 中指定多个模型。 ```json { "custom_trains": { "lu1995": { "name": "LU 1995", /* ... 其他配置和使用 BBMODEL 时相同,省略 */ "texture_id": "minecraft:textures/misc/white.png", "model": "mtr:lu1995/modeltrain_1995_tube_train.obj|1;%1;|mtr:lu1995/modeltrain_1995_tube_train_carriage.obj|;1,-1;|mtr:lu1995/modeltrain_1995_tube_train.obj|-1;%1,1;reversed", "model_properties": "mtr:lu1995/properties.json" } } } ``` 可在 `model` 处采用 "模型1|白名单1;黑名单1;额外属性1|模型2|白名单2;黑名单2;额外属性2" 的格式指定多个模型。其中,前一部分是模型的资源位置;后一部分是由两个英文半角分号分隔的,对于它左侧紧邻的这一模型指定的,白名单、黑名单和额外属性。 此写法只能用于导入 OBJ,不能用于导入 BBMODEL 或混合使用 OBJ 和 BBMODEL。 由于 MTR 本身设计限制,各个车厢的长度不能不同。 白名单、黑名单的用法与 MTR 自身提供的模型属性中的用法相同,对这一模型内由模型属性文件设定了的部件生效。额外属性设为 `reversed` 时,这一模型在载入时会被绕 Y 轴旋转 180°,模型属性内的车门连动亦会相应自动更新。即使某一部分为空,也需要打分号。 该特性的内部实现是通过对模型的部件改名完成的。如,通过此方法加载 `train.obj` 和 `carriage.obj` 时,设这两个 OBJ 中均有 `body` 部件,那么实际将把它们分别加载为 `train.obj/body` 和 `carriage.obj/body` 部件(只使用一个 OBJ 文件时就会被原样加载为 `body` 部件)(当额外属性设为 `reversed` 时,将加载为 `train.obj/reversed/body`)。 总之,就是把各个模型叠在一起拼成一整个超大模型。同时把文件名加到每个部件名的前面以区分不同文件里的同名部件。这是为了在 MTR 不支持多模型的系统里加载多个模型而采取的权宜之计。 然后,模型属性内关于 `body` 部件的设置也会被复制为 `train.obj/body` 和 `carriage.obj/body`,并相应地为这两个新的模型属性元素设置上在 `mtr_custom_resources` 里的 `model` 里设置的黑白名单(在模型属性文件里原先的设置被忽略)。这样对于不同模型里的同名部件就不用在属性文件里好几遍设置了。 而有对于某特定模型的特定部件单独进行设定需求,可以通过在模型属性里按改名后的名称写部件名。即,对于在属性文件里本来就有个前缀的部件,如名为 `train.obj/body` 的元素,它就不会参与前述的改名和黑白名单覆盖过程,它的黑白名单会被原样保留生效。 由于本质上是拼成一整个超大模型,然后对于全都被倒到一起了的每个模型里的每个分组单独应用黑白名单,所以是可以分别从不同模型里取部件来显示的,让它们最终被叠放在一起显示。这可以用于添加转向架模型。 ## RTM 移植 **著作权是一项值得极大注意的问题**。大多 RTM 列车模型作者不授权其模型被用于其他用途,所以您在未获原作者同意的前提下 **不得** 对移植后结果实施公开发布、在群组里分享或在服务器中使用等行为。 RTM 所使用的 OBJ 或 MQO 模型与上述的相关要求有所区别,在使用前需进行编辑。MQO 模型需使用水杉建模 (Metasequoia) 编辑。 您需将过多的分组进行合并,并按照上述渲染阶段相关的说明将半透明的面设置为 `……translucent` 阶段。您可按需设置 `interior` 和 `light` 阶段,以使得车内在夜间能亮起来。不过,RTM 的一些模型未将车内和车外的面放入不同分组,这使得设置 `interior` 阶段可能有些难度。您可将车门、门灯、头灯等放入单独的分组以便稍后设置动画。 导出时,需要将 MQO 转换成 OBJ,同时将尺寸缩小到原先的一百分之一。请不要忘记勾选导出分组信息。 接下来您可创建模型属性文件,以设置车门动画,及按需调整门灯等元素。 RTM 中列车各车厢通常是不同的模型,因此您要对其他车厢模型也进行上述操作。由于所有模型使用同一模型属性文件,您也要对这些模型中的相同用途部件使用相同的名称。然后您可按照前述指引为不同车厢设置不同模型。 同时,RTM 中列车本体模型和转向架模型是分开的。您可将转向架模型处理后加入到多模型列表里使其叠放,同时通过向模型属性文件中增加相关内容来指定其放置位置。您也可在一开始处理车身模型时就把转向架并入其中。 ## 自定义显示屏 不支持自定义显示屏。 ## BVE 移植 对于 BVE 的 CSV/ANIMATED 模型的具体支持将稍后讨论添加。