# 着色器: rendinst_vcolor_layered ## 概述 `rendinst_vcolor_layered`着色器专为渲染具有三个细节层的实例而设计,这些细节层基于以下条件进行混合: 1. 对象几何体的顶点颜色通道。 2. 每个图层对应的高度贴图。 **参数列表** - `script:t="atest=1"` 和 `script:t="details_alphatest=0,0,0,0"` – 这些参数协同工作以启用 Alpha 测试。第一个参数 ('atest') 激活 Alpha 测试,而第二个参数 ('details_alphatest') 设置每个细节图层的 Alpha 测试强度。 - `script:t="details_tile=1,1,1,0"` – 控制细节纹理的平铺。 - `script:t="invert_heights=0,0,1,0"` – 反转每个细节图层的高度图。可以使用小数值。值 '0.5' 将高度贴图转换为中性灰色填充。 - `script:t="paint_details=0,0,0,0"` – 允许在三个细节图层上绘画。 - `script:t="overlay_color_from=0,0,0,0"` – 定义使用线性插值 (LERP) 的叠加混合的起始颜色,蒙版由蓝色顶点颜色通道定义。 - `script:t="overlay_color_to=0,0,0,0"` – 定义叠加混合的目标颜色范围,从 '0' (黑色, RGB: '0,0,0') 到 '1' (白色, RGB: '255,255,255')。 ```{important} 如果在应用此着色器后未绘制顶点颜色,则 *Asset Viewer* 将在选择模型时产生错误(与第 5 个映射通道相关)。确保此着色器使用顶点颜色,因为没有顶点颜色,它将无法正常运行。 ``` ## Textures - **tex0**: Detail1 Diffuse (Albedo) - **tex2**: Detail1 Normals + Metalness + Smoothness - **tex3**: Detail2 Diffuse (Albedo) - **tex4**: Detail2 Normals + Metalness + Smoothness - **tex5**: Detail3 Diffuse (Albedo) - **tex6**: Detail3 Normals + Metalness + Smoothness ## 参数 ### Alpha 测试 此着色器适用于需要透明度的材质,例如破烂的布料或纸张。Alpha 测试由两个参数控制: - `script:t="atest=1"` – 激活材质的 Alpha 测试。在指定 'details_alphatest' 之前,此参数本身不会改变外观。 - `script:t="details_alphatest=0,0,0,0"` – 指定每个细节图层的 Alpha 测试强度,值范围为 '0' 到 '1'":" - 第 1 个组件:Detail1 - 第 2 个组件:Detail2 - 第 3 个组件:Detail3 - 第 4 个组件:未使用,但是必需的。 ### 细节平铺 细节平铺参数的行为类似于[rendinst_perlin_layered](../rendinst_perlin_layered.md)着色器。 - `script:t="details_tile=1,1,1,0"`: - 第 1 个组件:Detail1 的平铺。 - 第 2 个组件:Detail2 的平铺。 - 第 3 个组件:Detail 的平铺3. - 第 4 个组件:未使用,但是必需的。 ### 程序化绘画 此功能允许在细节图层上进行程序化绘制(类似于 [rendinst_perlin_layered](../rendinst_perlin_layered.md) 着色器)。 - `script:t="paint_details=0,0,0,0"` – 允许在三个细节图层上绘画。 - 第 1 个组件:细节 1 的绘制强度(允许分数值)。 - 第 2 个组件:细节 2 的绘制强度。 - 第 3 个组件:细节 3 的绘制强度。 - 第 4 个组件:选择调色板的线条。 ### Vertex Color Overlay 着色器使用顶点颜色的蓝色通道创建全局颜色叠加贴图。使用线性插值 (LERP) 混合两种颜色,映射由蓝色顶点颜色通道定义。 - `script:t="overlay_color_from=0,0,0,0"` – 定义混合的起始颜色。 - `script:t="overlay_color_to=0,0,0,0"` – 定义混合的目标颜色。 - 前三个分量表示 RGB 值,范围从 '0' (黑色) 到 '1' (白色)。 - 第 4 个组件当前未使用。 此叠加可调整细节图层的混合。例如,将曲率数据存储在蓝色顶点颜色通道中可以创建一种效果,即石头中的裂缝显示为黑色,而凸起区域显示为红色。默认情况下,两种颜色都设置为中灰色,因此不会应用其他颜色效果。 ```{important} 默认情况下,“from” 颜色是全局应用的。为防止绘制整个模型,请将 “from” 颜色设置为中性灰色 ('0.5, 0.5, 0.5, 0') 并配置 “to” 颜色以突出显示特定细节。 ``` ## 功能 ### VertexPaint 修改器 以下是将 *VertexPaint* 修改器与此着色器一起使用时需要的关键设置: - 此按钮用于切换模型上顶点颜色的显示。
- 用于绘制或填充顶点颜色的工具。
- 画笔不透明度和大小设置(默认大小为 20 米)。
- 绘制时用于选择几何体的选项。
- 用于混合绘制颜色的平滑画笔工具。
- 顶点颜色混合模式(类似于 Photoshop 图层)。使用多个修改器时,建议分别绘制每个颜色通道(R、G 和 B)。红色通道通常使用 “正常” 混合模式,而绿色和蓝色通道使用 **添加** 模式。
```{important} 默认情况下,模型上的顶点颜色设置为白色(所有通道的最大值)。要开始绘画,请用黑色填充整个模型。 ``` ### 混合细节 该着色器使用顶点颜色和高度贴图混合三个细节图层。 #### 顶点颜色混合 最初,Detail1 应用于整个模型。Detail2 和 Detail3 根据红色和绿色顶点颜色通道混合到其中。 例如,用 100% 红色绘制区域将在此处应用 Detail2,而 100% 绿色将应用 Detail3。顶点颜色中的平滑渐变可在细节图层之间创建更自然的过渡。 #### 高度贴图混合 高度贴图的亮度会影响每个细节图层的混合强度。顶点颜色的强度乘以相应的高度贴图亮度。 例如: - 如果两个细节图层具有相同的高度贴图和顶点颜色权重,那么它们将均匀混合。 - 具有黑色高度图的细节和具有中灰色高度图的细节将以不同的方式混合,因为中灰色高度图将具有更高的视觉效果。 ### 视觉示例 让我们考虑一个使用多个细节纹理及其相应高度贴图的汽车防水布示例。

fabric_tarpaulin_a_tex_d – Detail1 and Detail2

fabric_shabby_a_tex_d – Detail3

- **着色器参数:**

  • script:t="paint_details=1,0,0,1"
  • script:t="details_tile=12,16,20,0"
  • script:t="invert_heights=0,0,0,0"
  • script:t="details_alphatest=0,0,0,0"

  • tex0:t="fabric_tarpaulin_a_tex_d.tif"
  • tex2:t="fabric_tarpaulin_a_tex_n.tif"
  • tex3:t="fabric_tarpaulin_a_tex_d.tif"
  • tex4:t="fabric_tarpaulin_a_tex_n.tif"
  • tex5:t="fabric_shabby_a_tex_d.tif"
  • tex6:t="fabric_shabby_a_tex_n.tif"

3ds Max

Asset Viewer

默认情况下,整个模型被 Detail1 覆盖(因为我们不能让模型没有任何细节)。为清楚起见,它染成淡黄色(请参阅着色器参数)。 - X 轴(100% 红色):从 Detail1 中减去 Detail2。 - Y 轴(100% 绿色):从 Detail1 中减去 Detail3。 - Z 轴(100% 绿色和红色):从 Detail1 中减去 Detail2 和 Detail3。 这些细节基于其高度图进行混合(您可能会注意到从 Detail2 到 Detail3 的过渡不均匀),但混合并不完美 – Detail2 的高度图比 Detail3 的高度图更强。 我们通过在整个织物上应用 45% 的 Detail2 填充来引入一些细微的变化。这允许 Detail2 出现在分散的区域,根据高度贴图进行混合,从而增加视觉多样性。 接下来,我们应用了 55% 的 Detail2 增强了篷布的凸起部分,模拟了突出织物部分的褪色区域。我们使用 55%,因为 45% 的防水布已经被红色覆盖(Detail2)。 如果我们应用 100%,结果将是 145%,产生过度饱和的颜色,并导致磨损效果在织物上扩散太多。有两组屏幕截图 - 在模糊绘制区域之前和之后。 - 着色器参数:**

  • script:t="atest=1"
  • script:t="paint_details=1,0.4,-4,1"
  • script:t="details_tile=12,16,20,0"
  • script:t="invert_heights=0,0,0,0"
  • script:t="details_alphatest=0,0,0.33,0"

  • tex0:t="fabric_tarpaulin_a_tex_d.tif"
  • tex2:t="fabric_tarpaulin_a_tex_n.tif"
  • tex3:t="fabric_tarpaulin_a_tex_d.tif"
  • tex4:t="fabric_tarpaulin_a_tex_n.tif"
  • tex5:t="fabric_shabby_a_tex_d.tif"
  • tex6:t="fabric_shabby_a_tex_n.tif"

3ds Max

Asset Viewer

我们添加了 100% 的 Detail3 污点,然后应用了 30% 的平滑来混合它们。在 100% 时,Detail3 会显得太弱,因为与 Detail1 和 Detail2 相比,它的高度贴图不那么明显。 请注意 Detail3 周围的点,这些点实际上来自 Detail2,尽管我们没有直接绘制它们。发生这种情况是因为整个防水布填充了 45% 的 Detail2,并且只要 Detail3 从 Detail1 中减去,Detail2 也会开始混入。 我们为 Detail2 和 Detail3 配置了颜色以降低颜色对比度。 此外,我们还对 Detail3 应用了 alpha 测试(尽管它在屏幕截图中不是很明显)。 - 着色器参数:**

  • script:t="atest=1"
  • script:t="paint_details=1,0.4,-4,1"
  • script:t="details_tile=12,16,20,0"
  • script:t="invert_heights=0,0,0,0"
  • script:t="details_alphatest=0,0,0.33,0"
  • script:t="overlay_color_from=0.5,0.5,0.5,0"
  • script:t="overlay_color_to=0,0,0,0"

  • tex0:t="fabric_tarpaulin_a_tex_d.tif"
  • tex2:t="fabric_tarpaulin_a_tex_n.tif"
  • tex3:t="fabric_tarpaulin_a_tex_d.tif"
  • tex4:t="fabric_tarpaulin_a_tex_n.tif"
  • tex5:t="fabric_shabby_a_tex_d.tif"
  • tex6:t="fabric_shabby_a_tex_n.tif"

3ds Max

Asset Viewer

我们在蓝色通道中添加了分层叠加层。颜色渐变范围从 50% 灰色(不影响纹理)'0.5,0.5,0.5,0' 到 0% 黑色'0,0,0,0'。 为了说明“从-到”颜色概念,请考虑以下示例: `script:t="overlay_color_from=0.549,0.239,0.239,0"` (~RGB `140,61,61`).
任何未绘制为蓝色的区域都将使用 “from” 值着色。此方法在某些情况下可能很有用,但并不总是必要的。 作为最后的润色,让我们在织物上创建一个烧焦的角。虽然如果不进一步调整几何图形,此效果可能看起来并不完美,但意图应该很明确。请注意,我们必须擦除该区域中最初的 45% 红色填充,以使 Detail3 正确突出。 下面是一个正确应用着色器的适当几何图形示例(整个模型只使用一个细节层),展示了烧焦的边缘:
大多数阶段都被涂成不同的层: - Detail2 的全球应用。 - Detail3 的全球应用。 - Detail3 应用于烧焦的角落。 - 织物折叠覆盖层。 - 覆盖脏的防水布顶部。 - 单个点的叠加。 - 覆盖烧焦的角落。 ## 着色器使用 此着色器非常适合: - 不需要精细细节的各种类型的面料(不适合服装)。 - 石头,您可以在其中突出显示锐利的边缘(类似于空腔效果)并使其余部分变暗。 - 没有清晰细节的道具,如粘土花瓶。但是,在这种情况下,它不太适用,因为此着色器最适合密集网格。否则,它只会影响大面积区域。 - 对于 props,创建独特的纹理或使用 [rendinst_mask_layered](./rendinst_mask_layered.md)着色器通常更便宜。