# DagorMat ## 概述 DagorMat 本质上是 3ds Max 的着色器集合。要访问它,请打开“材质编辑器”(最好使用 Slate 材质编辑器)。 导航到 **General** 选项卡,您应该会看到 Dagor Dagorrat 材质下列出了两种材质。 ```{note} 如果您没有看到 DagorMat 列出,请按 'F10' 并将 **Renderer** 字段切换到 **Scanline Renderer**。 ``` 有两个版本可用,因为原始版本是 DagorMat1(通常简称为 DagorMat),其中着色器名称(类名称)及其参数必须手动输入。即使是现在,一些着色器还没有迁移到 DagorMat2,因此仍然在 DagorMat1 中打开,所有参数都通过脚本定义。这可能很麻烦,因为 3ds Max 的界面将明暗器参数显示区域限制为只有几行。 DagorMat2 可能是为了解决这些可用性问题而开发的,允许您使用鼠标友好的界面设置所有参数。 **着色器:** **其它参数:** ## 配置 DagorMat 着色器 由于 DagorMat1 不使用任何预设参数(一切都是手动编写的),因此无需额外配置。但是,DagorMat2 要求将着色器及其参数添加到`dagorShaders.cfg` 文件中,以便它们出现在 3ds Max 中。 这些配置文件可以在以下位置找到: ```text .../dagor_cdk/windows-x86_64/plugins-3dsMax/ ``` ### 通用配置参数 要配置着色器,请在任何文本编辑器中打开 `dagorShaders.cfg` 文件。 #### 纹理插槽名称 **参数:** ```text [_settings] tex1_name="diffuse" tex2_name="CUBE environment" tex3_name="normalmap" tex4_name="parallax (height field)" tex5_name="glossmap (specular mask+shininess)" tex6_name="emission tex (unsupported!)" tex7_name="lightmap" tex8_name="detail tex" ``` 控制以下内容: #### 全局参数 这些参数适用于所有着色器。虽然它们可能并非在所有地方都有效,但您可以在任何着色器中设置它们。如果着色器没有自己的特定参数,则仅使用全局参数。 **参数:** ```text [_global_params] lighting=enum(none lightmap vltmap) real_two_sided=enum(yes no) scene_emission=real optional emission=real optional relief=real optional atest=text optional reflection_multiplier=int optional ``` 控制以下内容: 请密切注意不同参数类型在 3ds Max 界面中的显示和处理方式: - `enum(none lightmap vltmap)`: 枚举显示为 “单选按钮”。 - `enum(yes no)`: 布尔选项显示为复选框。 - `real optional`: “实数”允许您指定任何数值。 ```{note} 3ds Max 不会导出零值,除非您手动输入零值。如果您添加了一个新参数(默认为 '0')并且没有将其替换为您自己的零,则不会导出该参数。 ``` - `text optional`: string 类型,通常在参数需要多个组件时使用 (例如, `(1,1,1,1)`). - `int optional`: 整数类型,范围从负无穷大到正无穷大。 ### 特定于着色器的参数 接下来,您将找到特定于每个着色器的参数。这些变量的定义与全局变量类似,使用相同类型的变量。 ```text [rendinst_perlin_layered] // 着色器名称 invert_heights=text optional // 参数 mask_gamma=text optional paint_details=text optional micro_detail_layer=real optional micro_detail_layer_v_scale=real optional micro_detail_layer_uv_scale=real optional // War Thunder 参数 blend_normals=text optional details_tile=text optional ``` ### 程序参数更新 现在可以使用位于`.../tools/util/dagorShadersCfgGenerator-dev.exe`的工具更新`dagorShaders.cfg`文件。 此工具执行以下步骤: 1. **读取父 `dagorShaders.cfg`:** 该工具首先加载父级 `dagorShaders.cfg` 文件,该文件用作更新着色器参数的基础。 2. **读取目标 `dagorShaders.cfg`:** 然后加载目标`dagorShaders.cfg`,最终参数和着色器将保存在其中。 通常,这与父级文件相同,因为没有其他着色器配置文件可供引用。 3. **加载着色器转储:** 该工具从特定于工具的着色器(`tools.ps50.shdump.bin`)或游戏着色器 (`game.ps50.shdump.bin`) 中读取着色器二进制文件列表。鉴于项目的多样性,着色器会有所不同,因此您可以指定来自不同项目的多个二进制文件,以将它们的参数合并到一个`dagorShaders.cfg`中。 4. **提取着色器和参数:** 该工具从着色器二进制文件中提取所有着色器及其参数。 5. **合并参数:** 它将这些提取的参数合并到父级`dagorShaders.cfg`中,仅通过添加新参数和删除过时的参数来维护结构。 6. **写入最终的`dagorShaders.cfg`:** 工具,然后将更新的配置保存到目标 `dagorShaders.cfg`。 该工具通过命令行运行,语法如下: ```text dagorShadersCfgGenerator-dev.exe [parent dagorShaders.cfg] [target dagorShaders.cfg] [shader binary 1 (.ps50.shdump.bin)] [shader binary 2 (.ps50.shdump.bin)] ... [shader binary N (.ps50.shdump.bin)] ``` ```{important} - **谨慎**。由于着色器环境的频繁更改,不应完全信任该工具。每次更新后,请始终与当前版本进行 'diff' 比较,并仔细查看任何差异。 - **潜在问题**。该工具可能偶尔会省略某些参数或无法找到您知道存在的着色器。 ```