# 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' 比较,并仔细查看任何差异。
- **潜在问题**。该工具可能偶尔会省略某些参数或无法找到您知道存在的着色器。
```