【案例】平面云

时间:2024-10-05 08:14:35

教程案例视频:Unity Shader Graph - 云教程
开发平台:Unity 2022
开发工具:Unity ShaderGraph

一、效果展示


在这里插入图片描述

二、ShaderGraph 路线图


在这里插入图片描述

三、案例分析


核心思路:使用 Noise(噪声)模拟云层状态

3.1 说明 | 云层运动

在这里插入图片描述
云层的最终表现输出为 Fragment 下 Base Color。
云层的自身表现属于多规则无序性质。则 Noise(噪声)是最佳的实现节点。ShaderGraph 提供累计3种的 Noise Node(噪声节点)可用。

  • (视情况均可选择,此处选择 Simple Noise 作为使用)
  • 在过去开发中,也有直接使用静态噪声纹理图作为 Sample Texture(纹理输入)的情况。


Simple Noise Node(简易噪声)提供 Scale 的输入变量管理噪声程度。因此需要新建 Cloud Scale 变量管理。
Simple Noise Node(简易噪声)提供 UV 的输入管理噪声图的运动表现。当需要噪声图动态变化以模拟动态云层图时,需要输入该变量。如上图所示加入了 Tilling And Offset (平铺与偏移)管理运动方向与速度。

当期望位移幅度可控时,需要对 Tilling And Offset(平铺与偏移)中的 Offset(偏移)进行输入管理。但为了模拟动态云层效果,加入了 Timer(计时器)的计时器节点。但计时器本身不具备控制偏移的发生与程度。加入 Cloud Speed 变量管理运动方向与速度。于是, Multiple(乘法)节点的作用是将结果值乘法以最终输入。得到的 Offset(偏移)在 Timer(计时器)作用下为一个持续动态变化值。

Power(幂函数),为了控制颜色厚度表现的重要值。因此加入 Cloud Power 控制云层颜色深度。同理将输出值与 Cloud Color 相乘作为最终的颜色输出效果。

3.2 说明 | 云层区域透明化表现

在这里插入图片描述
云层并非全覆盖,实际情况表现为部分区域保持透明效果。需设置 Shader Graph - Surface Type = Transport (透明模式)。在此模式下的 Fragment 中将新增 Alpha (透明度)的可管理选项。

最终云层图的输出在 Power (幂函数)中完成,因此获取该输入值。接入 Alpha 中。在实际情况中,为了控制透明度,新建了 Cloud Alpha 变量管理。

3.3 说明 | 云层消融表现

在这里插入图片描述
在 3.1 中仅仅实现云层的移动,即固定狀云的移动表现。实际观察云层在移动中也有着形状变化的差异。因此,在效果上增加一组 Noise Node 噪声来制作另一组图层叠加至原图层上混合输出达到目的。

新建的图层项的变量与原图层相似,但不再受原变量管理控制。混合后的图层通过 Multiple(乘法)输出至 Powder 计算最终输入至 Alpha 即可。为保证效果的良好,两组图层的变量数据应尽可能保持不一。