通用 - 过滤
汉化标题:通用 - 过滤
原文标题:General - Filtering
汉化更新时间:2026-01-14 13:34:25 +0800
英文原文最新更新时间:2022-06-13 01:18:53 +0300
若要定义光序列、材质调整,或例如发光物体,配置需要指定一个要使用的实体。在大多数这些情况下,您也可以设置一个对象列表:
[EMISSIVE_LIGHT_0]
MESHES = mesh0, mesh1, mesh2
...Masking
为简化操作,您还可以使用简单的掩码。您可能注意到 Windows 如何使用"*"表示"任意数量的任意符号"?出于兼容性原因,Patch 使用"?"达到同样的目的。
[EMISSIVE_LIGHT_0]
MESHES = mesh? ; 也将包括任何其他以"mesh"开头的网格,如 mesh_99
...Properties
也支持按属性过滤,并在需要时使用掩码:
[SHADER_REPLACEMENT_0]
MESHES = texture:cobbles_?.dds
SHADER = nePerPixelMultiMap_parallax
...请不要在":"前后添加空格,它的灵活性不如 CM 的过滤。
已知的属性和例子
- Meshes:
material:Material #91: 材质名称;renderable:yes: 网格是否可渲染;transparent:yes: 网格是否标记为透明;hasLodDistance:yes: 对于赛道,是否设置了任何 LOD 距离;mirror:yes: 网格是否分配给后视镜(在 0.1.62 中添加)。
- Nodes and meshes:
parent:COCKPIT_?R: 父节点名称;child:some_mesh: 子节点之一的名称;lod:A: 对于车辆,指定 LOD(用于扩展过滤;参见示例);active:yes: 节点是否处于活动状态(在 0.1.62 中添加);insideInterior:yes: 节点是否在内部(在 0.1.62 中添加);insideSteeringWheel:yes: 节点是否在方向盘内(在 0.1.62 中添加);first:yes: 网格是否为第一个子节点(在 0.1.62 中添加);last:yes: 网格是否为最后一个子节点(在 0.1.62 中添加)。modelRoot:yes: 网格是否为最后一个子节点(在 0.1.62 中添加)。
- Meshes and materials:
shader:ksPerPixel?: 着色器名称;texture:NULL.dds: 如果至少有任何使用的纹理匹配该名称则为真(不区分大小写);materialProperty:dirtyLevel: 检查着色器是否具有特定属性;materialResource:txBlur: 检查着色器是否具有特定资源;supportsDamage:yes: 检查着色器是否支持损坏;alphaBlend:yes: 材质是否启用 Alpha 混合(在 0.1.62 中添加);alphaTest:yes: 材质是否启用 Alpha 测试(在 0.1.62 中添加);vegetation:yes: 植被着色器,如树或草(在 0.1.62 中添加);dynamic:yes:"移动"着色器,如树、草或旗帜(在 0.1.62 中添加)。
自 0.1.62 起,对于像 parent:… 这样的内容,您也可以在其中使用属性,而不仅仅是名称。例如,如果您要移动赛道网格使其最后渲染,这里有一段 Hong 配置:
[SHADER_REPLACEMENT_...]
MATERIALS = decal_01, decal_02, decal_solids
MOVE_MESH_BEHIND = parent:modelRoot:y(只是为了澄清,MOVE_MESH_BEHIND 的工作方式是,它会找到所有具有给定过滤器的节点和网格,然后移动原始网格,使其在找到的网格之后渲染。过滤器 parent:modelRoot:y 找到赛道根节点中的所有子节点,因此 MOVE_MESH_BEHIND 将贴花移动到最后一个赛道网格之后。添加它更多是作为给自己的注释,因为我刚刚被它搞混了。)
Extended filtering
自 v0.1.25-preview183 起,现在支持扩展过滤,具有逻辑表达式、分组等。为此,首先用大括号将查询括起来,以指出它是扩展过滤器。其他一切与 CM 中的过滤非常相似:
[REFLECTIONS_FX]
MASK_CUBEMAP_SKIP = MIRROR_GEO, { GEO_INT? & parent:COCKPIT_HR } ; 您可以像以前一样在同一位置列出常规查询我建议使用引号来分隔扩展查询,如果想要使用任何特殊符号,请在其中将单独的关键字用不同的引号括起来:
[MESH_ADJUSTMENT_...]
MESHES = '{ "some mesh^4" & !shader:ksPerPixel }' ; 空格是可选的,但它们有帮助
...支持的表达式按优先级从高到低排列(当然,您可以使用括号"("和")"来更改顺序):
! A: 表示 NOT,如果 A 不匹配则匹配;A & B: 表示 AND,如果两边都匹配则匹配;A ^ B: 表示 NOR,如果 A 或 B 匹配但不同时匹配则匹配;A | B: 表示 OR,如果至少 A 或 B 匹配,或两者都匹配则匹配。
我认为在超过 99% 的情况下,不需要这个东西,但有时它真的可以有所帮助。例如,让我们看看 Highlands 配置,通过 165 MB 的替换 KN5 添加发光窗口。有时它可能会损坏或加载失败,没有它,更改"ksEmissive"会使整个建筑物发光,而不仅仅是窗口。但扩展过滤允许重写它:
[MATERIAL_ADJUSTMENT_2]
MATERIALS = '{ ( buildings_ext2, Gazebo_Tent ) & shader:ksPerPixelMultiMap_emissive }'
KEY_0 = ksEmissive
...不再有发光的建筑物,因为它只在着色器更改为"ksPerPixelMultiMap_emissive"时才起作用。
Examples
从 LOD A 中获取 mesh1,从 LOD B 中获取 mesh2(以防 LOD B 中有错误的 mesh1,LOD A 中有错误的 mesh2),对于车辆:
iniMESHES = '{ lod:A & mesh1 }', '{ lod:B & mesh2 }'
Features to add later
- 更多用于过滤的属性。