# Proxymats ## 概述 代理材质 (*proxymats*) 是一个用于多个`.dag`文件的共享参考资料系统。这些材质存储为单独的 `.blk` 文件,编辑时,更改会自动应用于引用该特定代理材质的所有`.dag` 文件。 要实施该系统,请执行以下步骤: - 为代理材质创建一个 `.blk` 文件。 - 指定 `.dag` 文件中的材质是代理材质。 - 在 `.folder.blk` 中,指定底层`.dag`文件使用代理材质。例如: ``` virtual_res_blk{ find:t="^(.*)\.lod00\.dag$" className:t="rendInst" contents{ lod{range:r=200;} allowProxyMat:b=yes } } ``` 这样,只要修改了它们引用的代理材质,所有底层的 `.dag` 文件都会被重建。 ```{important} 1. **请勿将此参数添加到没有使用代理材质的`.dag`文件的目录中**。这样做会减慢资产验证和构建资源的速度。 2. **明智地使用系统**。避免在完全不同的资源包中创建通用的代理材质。 例如,您不希望玩家控制的飞船的机枪材质仅仅因为环境美工人员根据自己的需要调整了代理材质而发生更改。 在这种情况下,最好复制代理材质。请记住,它只是一种材质,而不是纹理本身。 ``` ## 如何创建 Proxymat 代理材质`.blk`文件必须具有后缀`.proxymat.blk`。 例如,砖墙代理材质的`.blk`文件将被命名为: `brick_wall.proxymat.blk`. 为代理材质`.blk`创建内容的最简单方法是在`.dag`文件上配置材质,然后将内容复制到单独的`.blk`文件中。 只需要进行最少的编辑。由于代理材质`.blk`只能包含一个材质(尽管`.dag`可以引用任意数量的代理材质),因此您不需要材质名称或括起来的括号。 例如,而不是 ``` material{ name:t="stz_workshop_brick_plaster_wall" class:t="rendinst_emissive" tex16support:b=yes twosided:b=0 power:r=32 script:t="emissive_color=1,0.1,0.2,8" tex0:t="emissive_a_tex_d.tif" tex2:t="emissive_a_tex_n.tif" } ``` 代理材质 `.blk`将仅包含: ``` class:t="rendinst_emissive" tex16support:b=yes twosided:b=0 power:r=32 script:t="emissive_color=1,0.1,0.2,8" tex0:t="emissive_a_tex_d.tif" tex2:t="emissive_a_tex_n.tif" ``` ## 如何命名 Proxymat 代理材质应根据其应用命名。例如: `berlin_town_buildings_wall_brick_plaster_a`. 这种方法是必要的,原因如下: 1. 避免创建多个类似的代理材质(例如,`brick_plaster_wall_a-j` 用于不同的贴图)并忘记它们的用途。 2. 确保材质的用途清晰,防止它无意中应用于其他地图或资源,这可能会导致在出于其他需要更改原始代理材质时损坏资源。 因此,请始终为代理材质命名: - 基于资产类型和位置。 - 根据材质的成分(即它是由什么制成的)。 ## 如何在 3ds Max 中指定 Proxymat ```{important} 如果您使用的是 proxymats,请确保清洁它们插入的材料。剩余参数不会影响任何内容,但剩余纹理可能会导致错误,尤其是在稍后删除这些纹理时。尽管它们不会有任何直接影响,但缺少纹理会阻止构建资源,因为 `.dag` 文件将引用不存在的纹理。 **规则:** 一旦您将 proxymat 分配给材质,就从中删除其中的其他所有内容! ``` 代理材质被指定为 `class` (着色器),这意味着类名称应引用代理材质。例如: ``` class:t="brick_wall:proxymat" ``` 需要注意的是,代理只能通过 *3ds Max* 中的`DagorMat`材质类型进行分配。例如:
导出后, `.dag`将包含: ``` material{ name:t="brick_wall" class:t="brick_wall:proxymat" tex16support:b=yes twosided:i=0 amb:ip3=255, 255, 255 diff:ip3=255, 255, 255 spec:ip3=255, 255, 255 emis:ip3=0, 0, 0 power:r=32 } ``` 当然,您可以通过相应地更新“类”((着色器)来手动将任何`.dag`文件中的材质更改为代理材质。 ## 如何在 Blender 中分配 Proxymat 要在 *Blender* 中分配 proxymat,请创建一个新材质,根据所需的 proxymat 命名(不带 `:proxymat`后缀),然后选中相应的复选框:
如果 proxymat 已存在,请指定其目录的路径,然后单击 **(Re)load from file** 将其加载到视区中。 如果您不确定路径,但知道工程中存在该材料,请单击 **Find missing proxymat**,然后 [附加组件](../../dagor-tools/addons/blender/dag4blend/dag4blend.md)将自动找到所需的`.blk`。 要编辑 proxymat,请将其作为文本文件打开,进行更改,然后使用“工具”面板中的相应按钮应用它们。然后,使用 **Save proxymat** 按钮保存更改。 您也可以暂时取消选中 **is proxymat** 复选框,并使用标准工具而不是文本来编辑材质。 通过选中相应的复选框,指定目标目录并保存,可以将任何材质转换为 proxymat。 ```{important} *Blender* 中的材质名称将始终与 proxymat 的名称匹配。Therefore, if an imported `.dag`包含具有不同名称的 proxymat(例如,“bricks”,但着色器为 `"brick_wall:proxymat"`),它将自动重命名以匹配 proxymat。 如果在`apex_interior_material`的对象属性中引用了此材质,则该参数也将更新以避免在导出和构建资源期间出现错误。 ```