# 着色器系列:land_mesh_combined_decal ## 概述 我们使用多个对象几何体着色器将贴花应用于地形。不要将其与直接应用于地形几何体的简单地面贴花混淆 - 这是一个不同的主题。在这里,我们处理的是 **几何贴花**。 我们什么时候需要使用几何体将贴花应用于地形?当我们想要修改地形的几何体并添加一些新颜色(可能还有细节)时。一个很好的例子是机场。鉴于它们的尺寸较大,将它们渲染为具有独特纹理(或平铺纹理)的全尺寸模型是不切实际的,因为这会导致纹素密度不佳。此外,它们不会与周围的地形无缝融合——纹理之间会有粗糙的过渡。 解决方案是贴花。例如,如果您想在沙漠中建造一个白雪皑皑的机场,您可以使用贴花来实现这一点。所有贴花都是预制件 – 它们被烘焙到关卡的几何体中。
我们可以使用几个着色器来实现此目的: 1. `land_mesh_combined` 及其动态版本 `dynamic_combined_decal` 2. `land_mesh_combined_detailed_decal` 及其动态版本 `dynamic_combined_detailed_decal` 3. `land_mesh_combined_mixed_decal` 及其动态版本 `dynamic_combined_mixed_decal` ```{important} 动态着色器和静态着色器之间的区别归结为两个关键点: - 静态着色器应用于预制件,而动态着色器应用于动态模型(为简单起见,将它们视为具有动态着色器的模型)。 - 具有动态着色器的对象只能作为单位通过 *MissionEditor* 放置(无论它们是对象组还是动态对象的一部分)。相比之下,静态对象作为实体直接放置在 **Landscape** 中 tab. ``` ## land_mesh_combined / dynamic_combined_decal – 基本着色器 这是该系列中最简单的着色器。它没有参数,仅将贴花纹理应用于几何体。典型的材质配置如下所示: ``` material{ name:t="airfield_side" class:t="land_mesh_combined" tex0:t="./norway_herdla_airfield_empty_alpha.tif" } ``` 贴花纹理表示我们正在应用的漫反射组件。Alpha 通道控制贴花的透明度。 例如:

Airfield on the Map

Decal Diffuse

Decal Alpha

目前,这种基本着色器很少使用,因为对更多细节的需求已经增加,即使是与飞机相关的资产也是如此。但是,它有时应用于机场的“manchette”(用于将机场表面与周围地形混合的弯曲边缘)。在这种情况下,具有透明 alpha 纹理的着色器将分配给此几何体:
## land_mesh_combined_detailed_decal / dynamic_combined_detailed_decal – 具有一个细节层的着色器 此着色器适用于三种纹理: - **Slot 1:** 在 Alpha 通道中具有透明度的贴花纹理。 - **Slot 2:** 漫反射细节纹理。 - **Slot 3:** `_r` 细节纹理。 前两个插槽是不言自明的。`_r`纹理需要进一步阅读,但简而言之,它包含高度贴图、微细节索引、平滑度和反射率。根据这些参数,地形上的细节被浮雕并展示所需材料的物理特性。 ```{important} 这种 `_r`纹理与用于风景的纹理不同!在风景中,`_r`纹理包括反射率、环境光遮蔽、微细节指数和平滑度。 ``` 此着色器具有以下参数: - `script:t="detail1_size_ofs=0.25,0.25,0,0"` – 这将偏移细节纹理(有效地控制平铺)。 典型的材质配置如下所示: ``` material{ name:t="smolensk_aero_south" class:t="land_mesh_combined_detailed_decal" script:t="detail1_size_ofs=64,32,0,0" tex0:t="smolensk_aero_south_tex.tif" tex1:t="detail_soil_cracked_tex_d.tif" tex2:t="detail_soil_cracked_tex_r.tif" } ``` 逻辑与`land_mesh_combined`中的逻辑相同,只是此着色器向贴花纹理添加了一个细节层。从本质上讲,在这种情况下,贴花更像是叠加层,因为它的纹素尺寸很大,这会导致外观模糊。 精细的细节来自细节和微细节纹理。例如,细小纹理(如小裂缝或磨损图案)由细节图层处理,而较大的表面元素(如车辙或路径)则由贴花表示。 ## land_mesh_combined_mixed_decal / dynamic_combined_mixed_decal – 具有四个细节层的着色器 这是该系列中最先进的着色器。它的工作原理类似于`land_mesh_combined_detailed_decal`,但最多支持四个细节图层,而不是一个。 ```{important} 存在一个已知问题:如果对象在第三个通道中具有映射,则其在地面上的纹理可能会显示为半透明。避免使用不必要的映射通道。 ``` ```{important} 动态版本不适用于由致密材料(混凝土、沥青等)制成的大面积表面(数百米),因为从远处看它会变得半透明。例如,您可能会注意到,从远处看时,标记和跑道似乎会褪色。 ``` ### 着色器纹理 着色器适用于 10 种纹理: - **Slot 1:** 贴花 - **Slot 2:** 细节混合蒙版 - **Slot 4:** 细节图层 1 的漫反射纹理 - **Slot 5:** 细节图层 1 的 `_r` 纹理 - **Slot 6:** 细节图层 2 的漫反射纹理 - **Slot 7:** 细节图层 2 的 `_r` 纹理 - **Slot 8:** 细节图层 3 的漫反射纹理 - **Slot 9:** 细节图层 3 的 `_r` 纹理 - **Slot 10:** 细节图层 4 的漫反射纹理 - **Slot 11:** 细节图层 4 的 `_r` 纹理 混合蒙版是一个 RGB 蒙版,其中: - R 通道表示细节图层 1 - G 通道表示细节图层 2 - B 通道表示细节图层 3 - 所有通道中亮度低于 100% 的区域将显示细节图层 4。 ```{note} 如果第四个细节图层出现在没有细节图层 1、2 或 3 的区域,请不要担心。最终贴花的可见性由贴花的 Alpha 透明度控制,这意味着您可以使用透明度遮罩控制所有细节的外观,包括第四层。 ``` 例如:

Airfield on the Map

Decal Diffuse

Decal Alpha

Blending Mask

在这种情况下: - 蓝色通道定义通路。 - Alpha 蒙版可平滑其他细节图层的边缘,使其透明并显示第四个图层。 - 所有通道一起在 T 台上创建多色效果,混合不同类型的沙子、泥土和岩石。 一些示例使用更定义的掩码:

Airfield on the Map

Decal Diffuse

Decal Alpha

Blending Mask


在这种情况下: - R 通道表示混凝土。 - G 通道表示混凝土板。 - B 通道表示污垢。 - A 通道(蒙版中的黑色)表示沿混凝土和板边缘的污垢路径和灰尘。 所有这些元素都基于贴花的 Alpha 透明度显示。 ### Parameters - `script:t="detail1_size_ofs=0.25,0.25,0,0"` – 细节图层 1 纹理偏移(平铺) - `script:t="detail2_size_ofs=0.25,0.25,0,0"` – 细节图层 2 纹理偏移 - `script:t="detail3_size_ofs=0.25,0.25,0,0"` – 细节图层 3 纹理偏移 - `script:t="detail4_size_ofs=0.25,0.25,0,0"` – 细节图层 4 纹理偏移 典型的材质配置如下所示: ``` material{ name:t="markup_1" class:t="land_mesh_combined_mixed_decal" script:t="detail1_size_ofs=128,64,0,0" script:t="detail2_size_ofs=128,64,0,0" script:t="detail3_size_ofs=128,64,0,0" script:t="detail4_size_ofs=256,128,0,0" tex0:t="afghan_airfield_bagram_tex.tif" tex1:t="afghan_airfield_bagram_tex_mask.tif" tex3:t="detail_asphalt_a_tex_d.tif" tex4:t="detail_asphalt_a_tex_r.tif" tex5:t="detail_concrete_tex_d.tif" tex6:t="detail_concrete_tex_r.tif" tex7:t="detail_concrete_tex_d.tif" tex8:t="detail_asphalt_cracks_tex_r.tif" tex9:t="detail_sand_ground_tex_d.tif" tex10:t="detail_sand_ground_tex_r.tif" } ```