着色器系列:land_mesh_combined_decal
概述
我们使用多个对象几何体着色器将贴花应用于地形。不要将其与直接应用于地形几何体的简单地面贴花混淆 - 这是一个不同的主题。在这里,我们处理的是 几何贴花。
我们什么时候需要使用几何体将贴花应用于地形?当我们想要修改地形的几何体并添加一些新颜色(可能还有细节)时。一个很好的例子是机场。鉴于它们的尺寸较大,将它们渲染为具有独特纹理(或平铺纹理)的全尺寸模型是不切实际的,因为这会导致纹素密度不佳。此外,它们不会与周围的地形无缝融合——纹理之间会有粗糙的过渡。
解决方案是贴花。例如,如果您想在沙漠中建造一个白雪皑皑的机场,您可以使用贴花来实现这一点。所有贴花都是预制件 – 它们被烘焙到关卡的几何体中。
我们可以使用几个着色器来实现此目的:
land_mesh_combined及其动态版本dynamic_combined_decalland_mesh_combined_detailed_decal及其动态版本dynamic_combined_detailed_decalland_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"
}