《欧陆风云IV》使用 3D 模型来表现游戏中的许多图形对象,例如单位、建筑、树木等。
概述
所有模型及其对应的动画都位于/Europa Universalis IV/gfx/models/。
一个典型的模型会包含以下文件:
- <model>.mesh - 模型文件本身。
- <mode>_diffuse.dds - 模型的漫反射贴图。
- <mode>_normal.dds - 模型的凹凸(法线)贴图。
- <mode>_spec.dds - 模型的高光贴图。
如果模型使用了动画,动画文件通常遵循如下格式:
- <model>_<anim name>.anim
3D 模型的资源(asset)定义位于/Europa Universalis IV/interface/assets/。
模型必须先在该目录下的 .gfx 文件中被赋予一个脚本名称,然后才能被使用。下面是一个基本的资源定义示例:
pdxmesh = {
name = "empty_mesh"
file = "gfx/models/Mapitems/empty.mesh"
scale = 1.0
}
3D 模型的实体(entity)定义位于/Europa Universalis IV/gfx/entities/。
拥有脚本名称的模型必须被定义为实体后,才能在游戏中生效。实体负责控制模型(pdxmesh)与各个动画之间的关联。下面是一个基本的实体定义示例:
entity = {
name = "selection"
pdxmesh = "selection"
state = { name = "idle" animation = "idle" }
}
动画定义位于/Europa Universalis IV/gfx/models/下各子文件夹内的 .asset 文件中。
动画定义用于控制动画的脚本名称,实体定义中引用的是这个脚本名称,而不是实际的文件名。下面是一个基本的动画定义示例:
animation = {
name = "AO_Eagle"
file = "eagle_idle.anim"
}
单位模型
单位模型(或不准确地称为精灵图,sprites)是陆军和舰队在游戏中的表现形式。与其他Paradox大战略游戏一样,《欧陆风云IV》的模型出了名地难以修改。本指南将详细介绍处理单位模型的技术层面,但不会涉及美术或 Photoshop 技巧。
在开始制作模组之前,你需要先了解精灵图在游戏中是如何运作的。
陆军
对于陆军,有四个“精灵图等级”,用来表示一个国家的军事科技发展程度。游戏还会选取占主导地位的陆军单位类型来代表这支军队——步兵、骑兵或炮兵。
以下信息位于/Europa Universalis IV/common/technologies/mil.txt:
| sprite_level | 军事科技等级 | 年份 | 描述 |
|---|---|---|---|
| 1 | 0 | 1350 | 中世纪晚期的长矛与铠甲 |
| 2 | 12 | 1557 | 三十年战争时期的火枪手 |
| 3 | 21 | 1674 | 七年战争时期的火枪手 |
| 4 | 26 | 1745 | 拿破仑时代的步兵 |
| 5* | 30 | 1805 | EU4 中未使用! |
舰队
对于海军舰队,精灵图等级表示占主导地位的舰船类型(从重型船、轻型船、桨帆船或运输船中选取)所达到的最高等级。与陆军单位不同,现有的海军单位不会随科技等级自动升级。
DLC
单位包 DLC 中包含了游戏里一些最好看的单位,因此很容易让人想在自己的模组中使用它们。不过你需要注意兼容性问题,因为并非所有人都拥有你所使用的 DLC。
3D 模型
自 2015 年初起,玩家可以创建自定义的 3D 模型和动画,并通过 JoroDox模组制作工具将它们导入游戏。此外,这个 git 仓库(IO PDX MESH)提供了在 Blender/Maya 中导入和导出模型的扩展。 在此之前,只能使用基础游戏和 DLC 中已有的模型,这些模型可以通过文本、十六进制和图像编辑器进行修改。
模型类型
EU4 中的各类视觉表现都会用到 3D 模型,且几乎全部出现在 3D 地图界面中。
- 单位模型 - 陆军和舰队的视觉表现。同时也会显示在战斗结算对话框中。
- 单位部件模型 - 单位模型可以通过在基础模型的特定位置放置其他模型来扩展。例如:武器、盾牌和骑手。
- 省份活动模型 - 用于指示省份活动,例如殖民地建设,或单位和/或建筑的建造。
- 省份建筑模型 - 城市由大量小型建筑组成,城市越大,使用的建筑越多。特定的省份建筑也会显示在城市中,或显示在海洋省份的港口位置。代表省份所有者的旗帜也属于这一类型。
- 地图装饰模型 - 不依附于省份的地图装饰物,例如熊、海鸥和其他动物。这也包括 3D 地图周围的边框。
- 树木模型 - 用于生成树木/森林视觉效果的模型。(包含不同的细节层次(LOD))
- 贸易网络模型 - 贸易网络的节点,以及行进中的船只/马车,都通过 3D 模型来呈现。
着色器
Paradox 网格格式(.mesh)中可以使用多种不同的着色器,每种着色器会对 3D 模型(的一部分)产生不同的视觉效果。可以通过在 'gfx/FX/pdxmesh.lua' 文件中加入新的着色器代码来创建新的着色器,但这需要具备顶点着色器与像素着色器方面的专业知识。
| 着色器名称 | 描述 |
|---|---|
| PdxMeshStandard | 标准网格。漫反射使用 RGB,另有法线贴图,高光(“光泽度”)数值取自高光贴图的 alpha 通道。 |
| PdxMeshColor | 高光贴图的 RGB 通道分别代表国家的主色、次色和第三色。是单位最常用的着色器。 |
| PdxMeshTextureAtlas | 将国家旗帜印在单位上的着色器(旗帜 UV 范围为 0.05-0.95)。可以添加第二套 UV 贴图,把一张纹理合并到旗帜中。 |
| PdxMeshSnow | 在冬季为朝上的表面添加积雪。 |
| PdxMeshAlphaBlend | 透明度取自漫反射贴图的 alpha 通道。 |
| PdxMeshAlphaBlendNoZWrite | 透明度取自漫反射贴图的 alpha 通道。开销更大,但出现的显示错误更少 |
| PdxMesh_NoFoW_NoTI | 永远不会被战争迷雾或未知领域遮挡 |
| Collision | 不渲染网格,而是代表“可点击”的区域。 |
单位模型
创建新的单位模型需要具备 3D 建模方面的基础知识。最好先从导入现有单位并做一些无需重新绑定骨骼和蒙皮的小改动开始尝试(使用不使用颜色着色器的网格——以国家标签标示)。随后可以将单位实体组合成精灵图包(如自定义国家界面中所见),放在 gfx/sprite_packs 中。
绘制纹理时,需要牢记纹理是带 mipmap 生成的,这可能会带来一些奇怪的问题(遇到这种情况,可以先导出为更简单的格式——png——在其上绘制,然后再转换回来)。我使用下来问题最少的设置是:“Compression: BC3/DXT5”和“Generate mipmaps: on”。高光贴图的编码方式是让 alpha 通道代表“光泽度”;此外,如果网格使用的是 PdxMeshColor 材质,则红、绿、蓝通道代表需要填充的国家主色(这同样是一个范围)。在编辑现有的高光贴图时,会发现有很多区域的 alpha 通道为 0(完全无光泽),但仍然含有颜色,这种效果可以通过先在表面上绘制,再将其擦除来实现。
| 文档 | 效果 • 触发条件 • 修正列表 • 作用域 • 变量 • 本地化 • 可自定义本地化 • 运行文件 • 事件图片列表 |
| 脚本 | 脚本函数 • 顾问 • 时代 • 开局设定 • 建筑 • 宣战理由 • 殖民区域 • 国家创建 • 文化 • 决议 • Defines • 外交行动 • 灾难 • 中华帝国 • 阶层 • 事件 • 派系 • 政府 • 政府互动 • 伟大工程 • 历史 • 神圣罗马帝国 • 理念组 • 思潮 • 佣兵 • 任务树 • 修正 • On Actions • 议会 • 和约 • 君主性格 • 政策 • 叛军类型 • 宗教 • 附属国类型 • 科技 • 贸易公司 • 商品 • 单位 |
| 地图 | 地图 • 地图修改速查 • 随机新世界 • 贸易节点 |
| 图形 | 模型 • 界面 • 贴图库 • 字体 • 单位模型 |
| 音频 | 音乐 • 音效 |
| 其他 | 控制台命令 • 校验和 • 模组结构 • 故障排查 • 运行文件 |
| 工具 | 克劳塞维茨开局编辑器 • EU4模组编辑工具 • JoroDox模组制作工具 • The Validator |
| 指南 | 省份 • 地图修改速查 • 存档编辑 • 脚本教程 |