跳转到内容

Trainz/Blender 教程

来自维基教科书,开放世界开放书籍

关于此页面

[编辑 | 编辑源代码]
此页面的目的是使人们能够使用 Blender for Trainz 导出器将他们的 Blender 作品导出到 Trainz。这里不是回答所有与 Blender 或内容创作相关的问题的地方,这里只描述与导出器行为直接相关的内容。如果您在 Blender 中遇到问题或对内容创作本身有疑问,那么您可以在以下链接中找到许多解释和经验丰富的人员
Blender 文档
Blender 社区
TRS2006 内容创作指南
Trainz Classics 内容创作指南
Trainz 讨论论坛
使用 Blender 为 Trainz 创建内容所需的显然是 Blender 本身和 Blender for Trainz 导出器。该脚本是为 Blender 2.45 开发的,但任何更高版本也应该可以工作。要使用 Blender for Trainz 导出器,您必须解压缩档案并将包含的文件 *trainz_exporter.py* 复制到 Blender 的脚本目录。这通常是位于子目录 *.blender* 中的 *scripts* 文件夹,因此,如果您使用默认路径在 Windows 系统上安装 Blender,则必须将 *trainz_exporter.py* 文件从档案复制到文件夹 *C:\Program Files\Blender Foundation\Blender\.blender\scripts* 中。

您的 Blender 安装有一个脚本目录。通常有两个位置需要查看,一个是如上所述,另一个是在“应用程序数据”下,它是“文档和设置”下的一个隐藏文件夹,因此请转到文档和设置,工具,文件夹选项,查看,“显示隐藏文件和文件夹”。

例如,在我的机器上,这将是 C:\Documents and Settings\Trainz\Application Data\Blender Foundation\Blender\.blender\scripts,其中 trainz 是帐户名。您应该在那里看到大约 100 个 .py 文件。

每次 Blender 启动时,它都会扫描此目录并将找到的任何脚本包含到其菜单结构中。因此,如果您在复制导出器脚本后启动或重新启动 Blender,那么您可以通过 Blender 菜单 **文件 > 导出 > Trainz 导出** 来调用它。选择要创建的内容,如果一切顺利,您将进入 Blender 的文件保存对话框。选择所需的位置和文件名,然后按 **保存** 以最终创建资源文件。您应该始终检查 Blender 控制台以获取信息或警告,因为导出器只会在致命错误时停止。

Blender 设置

[编辑 | 编辑源代码]
我们仍然需要弄清楚哪些是最佳的 Blender 设置,以免在最终查看 Trainz 中的创作时感到惊讶。相反,只需要一些基本的提示
  • 在 Blender 中,您不能像在 GMAX 中那样缩放单位(在 GMAX 中,您必须在首选项中设置系统单位为一米),只需假设一个 BU(Blender Unit)为一米即可。如果您想使用英制单位,那么您可能需要看一下 Blender 网格属性编辑器
  • 如果您想将一个物体移动到一个绝对位置,那么切换到物体模式(热键 **TAB**)并按 **N**。在现在可见的变换属性窗口中,您可以输入所需的值。但是请注意,LocX、LocY 和 LocZ 是局部值,只有当物体没有父级时,这些才是世界坐标。如果您已经分配了父级,那么您将看到并必须输入相对于该父级的位移。
  • 并非所有在 Blender 中可视化的材质属性都会在 Trainz 中产生影响,而 Trainz 中的一些效果在 Blender 中无法可视化。因此,不要相信您在 Blender 中看到的内容,并在 Trainz 中查看您的创作。
  • 由于纹理仅漫射,不透明度、反射和法线贴图会在 Trainz 中产生影响。您也可以导出没有任何纹理的网格。
  • 右侧视图显示的是网格的左侧,与 Gmax 不同。
网格是在 Trainz 中您将看到的 Blender 对象。您可以通过操作 Blender 基本体或甚至放置顶点并创建面来构建您的对象。请记住以下几点
  • 将您的创作以原点为中心,因为 Trainz 会在您插入资产时将此点放置在光标位置
  • 面可以是双面或单面,在 Blender 中,这是网格而不是材质选项。您只有在 Trainz 中才能识别出这种差异,因为 Blender 会始终双面渲染面。
  • 每个网格都需要一个材质;您可以在不同的网格上使用同一个材质
  • 密切注意顶点和面的数量
导出器只识别在导出过程中可见的网格。确保您要导出的所有对象都可见,并且您也已选择所有所需的图层!这样做的原因有两个:首先,您看不到的东西将不会被导出(可能是很久以前遗忘的测试网格)。第二个原因是,您可以将大型或动画对象保存在一个 Blender 文件中,并通过更改可见性(这里涉及到图层)来导出所需的部件。
一旦您想为您的资产制作动画,就必须使用骨骼。您可以通过放置一个格栅(**添加 > 格栅**)并将其重命名为类似于 *b.r.something* 的东西来创建骨骼,如 CCG 中描述的骨骼命名约定所示。如果您使用骨骼,您需要构建一个完整的层次结构,这意味着从根骨骼开始,所有其他骨骼或网格都需要是该根骨骼或任何从属骨骼的子级。如果您有松散的网格或骨骼,则导出器将拒绝工作,因为未绑定的网格不会显示在 Trainz 中。
根骨骼应该位于原点,并且不应该旋转。最佳做法可能是将其放置在顶视图(热键 **NumPad 7**)中,并保持不动。根骨骼也不应该被动画化;它用作此资产中任何未动画化网格和任何未由动画父级驱动/依赖的骨骼的父级。
要导出骨骼,它们必须是可见的;因此请关注您的大纲视图和图层。

连接点

[编辑 | 编辑源代码]
附件点在 Trainz 中用于附加效果、轨道甚至其他网格。要创建 AP,您必须先添加一个空物体 (**添加 > 空物体**)。之后像您需要的那样放置和旋转它,并按照 AP 的 CCG 规则 ( *a.whatsoever*,你还记得吗?;) ) 给它命名。AP 不需要父级,因为这些信息会在导出过程中丢失。尽管 Trainz 使动画成为可能,但它使用了扩展的命名方案。假设您有一个骨骼 *b.r.john* 和一个 AP *a.doe*。要告诉 Trainz *a.doe* 应该像 *b.r.john* 一样动画化,您必须将 AP 重命名为 *a.r.john/a.doe*。在您的 config.txt 中,这个 AP 仍然称为 *a.doe*。
对于网格和骨骼有效的,对于附件点同样有效:如果它们不可见,它们将不会被导出。

材质

[edit | edit source]

颜色

[edit | edit source]
您可以在 Blender 中操作漫射色和镜面反射色,以使 Trainz 中的材质呈现您想要的视觉效果。您可以在材质面板中找到这两个颜色,**Col** 用于漫射色,**Spe** 用于镜面反射色。
1 - Blender 材质面板
Trainz 还支持另外两种颜色:环境色和自发光色。
Blender 中的环境色与 Trainz 中的工作方式不同,而且在大多数情况下,环境色和漫射色将相等,环境色在导出过程中从漫射色复制。自发光色在 Trainz 中用于自发光,Blender 中没有提供。由于物体通常即使在光照下或光照下也具有相同的颜色,因此导出器在此也复制漫射色的值。
如果您计划使用纹理,您应该将漫射色设置为纯白色,否则您的纹理在 Trainz 中看起来比预期更暗。

不透明度

[edit | edit source]
您也可以在材质面板中找到不透明度的滑块,在 Blender 中称为 Alpha(滑块 **A** 在右侧下方)。值为 1 表示材质完全可见,值为 0 表示材质完全不可见。如果您使用也影响不透明度的纹理贴图,则最好将 Alpha 滑块保留在它的正确位置,因为整体不透明度不会高于材质不透明度。

镜面反射

[edit | edit source]
可以使用着色器面板调整镜面反射。有趣的滑块是面板中间的镜面反射 **Spec** 和硬度 **Hard**。
2 - Blender 着色器面板
镜面反射滑块保持镜面反射色的强度,从 0(无镜面反射高光)到 2(全镜面反射高光),而硬度滑块定义反射光的集中度。高硬度产生硬镜面反射(想象玻璃或抛光表面),而低硬度产生暗淡的光泽(如沥青或粗糙/脏金属)。硬度范围(1..511)将由导出器缩放到 0..100,因此如果您想要复制 GMax/Max 光泽度值,您需要将其乘以大约 5。

自发光

[edit | edit source]
没有光照时的亮度。您可以在着色器面板的右下角找到 **Emit** 滑块。自发光度越高,您的材质在漫射色中发光就越强。

纹理

[edit | edit source]

通用

[edit | edit source]

首先是关于纹理的一些通用事项。

  • **切勿使用打包的图片格式**,因为它们通常会扭曲颜色,在加载时浪费资源(要解压缩,它们需要额外的内存和 CPU 时间),最后它们在内存中的占用空间与未压缩的图片格式相同。一种好的格式是 Targa (*.tga*),因为它没有压缩(不要使用 RLE 选项!)并且能够存储 Alpha 通道(如果需要)。
  • 使您的纹理尽可能小。无论什么有效,都要创建纹理的尺寸是最终使用尺寸的两倍,然后在启用抗锯齿的情况下将它们缩小。您将获得与原始地图几乎相同的细节等级,并且只需要 1/4 的内存。
  • 始终使用“2 的幂” - 作为地图尺寸的值(例如 64x64、128x128、128x512)。这些纹理可以非常快速地处理,因为“2 的幂” - 数字是硬件的本机语言。您不必坚持使用正方形地图,但也要避免长宽比低于 1:8。
在 Blender 中,您可以使用材质按钮窗口(热键 **F5**)中的纹理面板分配纹理。
3 - Blender 纹理面板 - 空白
4 - Blender 纹理面板 - 创建的纹理物体
创建 TE 物体后,您必须告诉 Blender 映射信息应该来自哪里(地图输入)以及哪个材质属性应该受到影响(映射到)。
5 - Blender 地图输入面板
6 - Blender 地图到面板
Blender 选择的默认地图输入是 **Orco**。这是一种 Trainz 不使用的映射。对于反射贴图,您可以选择 **Refl**,对于所有其他使用的贴图,导出器只接受 **UV** 映射。作为映射目标,您可以选择以下选项之一或多个
  • **Col**,用于漫射贴图
  • **Alpha**,用于不透明度贴图
  • **Ref**,用于反射贴图
  • **Nor**,用于法线(凹凸)贴图
您可以分配其他映射目标,这些纹理将被导出,但您不会在 Trainz 中注意到任何效果。
现在剩下的要做的当然是用它加载纹理本身。在 Blender 中,您可以使用纹理按钮窗口(热键 **F6**)定义纹理的内容。您只能导出到 Trainz 的纹理类型是 **Image**,因此您可以忽略 Blender 中的所有其他可能性。
7 - Blender 纹理按钮
现在通过在图像面板上按 **加载** 来选择相应的图像。
只剩下一个选项,即“无纹理”选项。用于 Trainz 的 Blender 导出器允许您导出没有任何纹理的模型。这可以通过直接在 Trainz 中对纯网格进行“快速检查”来加快资源创建速度。要导出没有任何纹理的模型,您只需删除可能分配的纹理物体即可。

漫射纹理

[edit | edit source]
漫射纹理是最常用的纹理,它们基本上定义了物体的表面。要使用它们,您必须选择 **UV** 按钮作为输入,并选择 **Col** 按钮作为输出。您可以使用 **Col** 滑块调整纹理量,该滑块位于映射到面板的右中间。

不透明度纹理

[edit | edit source]
Alpha 纹理用于模拟透明材料或使物体的部分不可见。您可以创建脏窗户或使一个简单的平面看起来像一个转向架部件。Alpha 贴图通常与漫射贴图一起使用,因此所需的 **UV** 映射应该已经完成。作为目标,选择 **Alpha**。纹理量由映射到面板右侧的 **Var** 滑块控制。
如果您使用具有 Alpha 层的图像,则可以将漫射纹理和不透明度纹理组合在一起。您需要在映射图像面板中选择 **使用 Alpha** 选项,并且必须在映射到面板中选择 **Col** 和 **Alpha** 作为目标。
如果您使用不透明度,可能会出现一个小问题:由于 Trainz 中的错误,并非完全不透明或透明的区域可能会相互重叠。您可以查看这个问题以及一种可能的解决方法,方法是从 SourceForge 下载两个相关的示例。

反射纹理

[edit | edit source]
这些纹理的使用方式与其他纹理略有不同,因为 Trainz 会使用球面映射自动映射它们。您可以通过创建光滑的球体并分配反射贴图来最好地理解它的工作原理。显示哪部分贴图取决于从摄像机到物体表面的假想光线将反射的方向。这就是为什么您会在光滑球体的表面上看到整个贴图的原因。
要使用反射贴图,您只需要在贴图输入面板中按下Refl按钮,并在指定纹理的贴图到面板中按下Ref按钮。您会注意到材料预览和渲染窗口中都不会出现任何颜色。这是因为 Blender 使用反射纹理来修改反射的强度而不是颜色。但不用担心,在 Trainz 中您会看到颜色回来了;)。

硬度纹理

[编辑 | 编辑源代码]
您可以分配硬度纹理,但您会感到失望。它们不会影响硬度,而是会在导出时被视为反射纹理。这种行为是复制自原始导出器,因为任何尝试影响“shinestrength”的行为到目前为止都会导致一个完全白色的未照明物体。

法线纹理

[编辑 | 编辑源代码]
法线纹理用于在平面表面上模拟高低起伏。要使用它,您需要一个UV贴图输入和一个Nor贴图到。请注意使用法线贴图而不是凹凸贴图。两者用于相同目的,但它们包含不同的数据。

纹理组合

[编辑 | 编辑源代码]
纹理在 Trainz 中如何影响物体的外观是由所谓的“材质名称装饰”控制的。除一种例外情况外,Blender 导出器 for Trainz 会根据您分配的纹理选择合适的装饰。这种例外情况是m.billboard,因为这种材质装饰用于始终面向摄像头的物体。由于导出器无法检测您是否希望这种行为,因此您必须自己用结尾m.billboard装饰材质名称。通常情况下,导出器不会覆盖已知的材质装饰,因此,如果您想确保您的材质以m.gloss形式导出,则只需将m.gloss添加到材质名称中。
所有当前支持的纹理组合的列表
单一纹理
  • 漫反射纹理
  • 反射纹理
  • 硬度纹理(将显示为反射纹理)
双纹理
  • 漫反射和 alpha 纹理
  • 漫反射和反射纹理
  • 漫反射和硬度纹理(与漫反射和反射相同)
  • 漫反射和法线纹理
三纹理
  • 漫反射、反射和 alpha 纹理(在这种情况下,alpha 纹理影响反射纹理而不是漫反射纹理)
  • 漫反射、alpha 和法线纹理(不允许反射或硬度纹理)
  • 漫反射、反射和法线纹理(不允许 alpha 纹理)
在动画导出情况下,原始导出器会要求您提供一个事件文件,以将事件绑定到特定帧。在 Blender 导出器 for Trainz 中使用事件类似。将 Blender 窗口切换到文本编辑器窗口,并通过文件 > 新建(热键Alt N)创建一个新的 TX 对象。对于每个事件,输入一行,包含帧号、事件类型和事件名称。如果您最后将这个 TX 对象重命名为events,那么导出器将解析此文本并在您的动画文件中创建所需的条目。
您可以在SourceForge下载部分找到的附加文件中找到示例
华夏公益教科书