资源
Turian 使用导入管线:你放入项目 assets/ 文件夹的文件是源文件。导入时,每个源文件被分配一个稳定的 GUID(存储在副文件 <file>.meta 中),并烹饪为 .cache/assets/ 下的运行时产物。发布的游戏从打包的 .oap 中读取这些产物,从不接触松散的 assets/ 文件夹。资源之间的引用(材质的纹理、MeshRenderer 的网格)以 GUID 形式存储,因此在重命名和移动时仍然有效。
导入模型(glTF / GLB / OBJ)
将 .gltf、.glb 或 .obj 放入 assets/ 会导入其几何体。对于 glTF/GLB,Turian 还会读取文件中的材质和纹理,并从中生成引擎资源——单个模型是一个源,会产生多个资源:
- 每个 glTF 材质对应一个
.material,将 glTF 金属粗糙度模型映射到内置 PBR 着色器(基础颜色、金属度、粗糙度、自发光 + 强度、法线缩放、遮蔽、透明度模式/阈值、双面 → 剔除); - 每个引用的图像对应一个纹理资源。
这些生成的资源记录在模型的 .meta 中,并在重新导入时保持其 GUID,因此场景引用保持有效。不支持的材质扩展会发出警告,但不会致命。
几何体在导入时烹饪为规范的二进制网格,因此运行时通过一个快速、格式无关的路径加载它——OBJ/glTF/cgltf 解析仅在编辑器中进行,从不在发布的游戏中进行。
编辑生成的子资源
在资源浏览器中选择一个导入的模型;检查器会在生成的资源下列出其生成的材质/纹理。单击一个材质打开并调整(例如其基础颜色)。编辑在重新导入时保持不变——导入器仅(重新)生成缺失的材质。完整的重新导入会清除缓存,从源重新生成所有内容。
导入设置
选择纹理或模型会显示导入设置面板(Unity 风格):
- 图像 —— 纹理类型(默认 / 法线贴图 / 精灵 / UI / HDR)、色彩空间、Mipmap、压缩、滤镜、包裹、最大尺寸。
- 模型 —— 导入材质、导入动画、缩放因子。
设置存储在 .meta 中;应用会重新烹饪资源。
外部纹理 vs 内嵌纹理
- 外部图像(glTF 引用同级
.png/.jpg文件)成为普通的纹理资源,拥有自己的.meta——因此你可以像其他任何资源一样选择和交换它们。 - 内嵌图像(GLB 二进制块或 base64 数据 URI)在导入期间被提取为仅缓存纹理资源。
无论哪种方式,生成的材质都会通过 GUID 绑定每个贴图。常见格式(PNG、JPEG 等)被解码为 RGBA8。
纹理格式
| 格式 | 路径 |
|---|---|
| PNG / JPEG / BMP / TGA / WebP | 解码为 RGBA8(stb_image)。 |
KTX2(.ktx2) |
GPU 块格式直接上传——BCn 直通、Zstandard 解压、Basis Universal(ETC1S / UASTC)转码为 BC7。Mip 级别得以保留。 |
KTX2 支持位于独立、与引擎无关的 ktx2 模块中(包含供应商提供的 Basis Universal 转码器),嵌入在 loadTexture 后面,因此材质和导入器保持格式无关。
PBR 材质
.material 是一个小型 JSON 资源,通过 GUID 引用着色器,并存储该着色器暴露的参数值。内置的 PBR(金属粗糙度) 着色器暴露:
| 参数 | 类型 | 说明 |
|---|---|---|
base_color |
颜色 | 漫反射色调(RGBA) |
metallic、roughness |
标量 | 0–1 |
emissive、emissive_strength |
颜色 / 标量 | |
normal_scale、occlusion_strength |
标量 | |
alpha_cutoff |
标量 | 用于蒙版透明度 |
albedo_map、metallic_roughness_map、normal_map、emissive_map、occlusion_map |
纹理 | 通过 GUID 绑定 |
由于生成的材质是普通资源,你可以在检查器中编辑它,或者将网格切换到不同的材质而无需接触模型。当你将 MeshRenderer 的网格设置为模型且其材质仍为空时,Turian 会自动填充该模型的主要生成材质。
你也可以通过资源浏览器从头创建材质,包括内置预设(默认、金属、塑料、自发光、玻璃)。
示例
3d-model-materials 示例并排展示了三个对象:使用内置金属预设的 OBJ 立方体、作为 glTF(外部 .png 贴图)的 Khronos WaterBottle,以及作为 GLB(导入时提取的内嵌贴图)的同一个瓶子。其结构设计为可扩展到大型场景,如 Sponza 或 Bistro——将模型放入 assets/models/,打开项目,添加到场景中即可。
另请参阅组件参考了解 MeshRenderer 组件,以及项目设置了解引导场景。