URP 渲染实战 / 第 4 章 Shader 里的数学工具箱与程序化图案 / 案例 4.5
案例 4.5白噪声、Value、Gradient、Simplex 并排对比进阶
目标:用同一个 Shader、同样的缩放,把四种噪声并排画出来,叠加整数格线,直观看到它们的区别。
Assets/Cookbook/Ch04/C04_05_Noise.shader(节选:select)
if (_Mode < 0.5) n = Hash21(p); // 每格一个随机值,格内不变 else if (_Mode < 1.5) n = ValueNoise(p); // [0,1] else if (_Mode < 2.5) n = GradientNoise(p) * 0.5 + 0.5; // [-1,1] → [0,1] else n = SimplexNoise(p) * 0.5 + 0.5;
Gradient 和 Simplex 的输出大致在 [−1, 1],显示前要用 * 0.5 + 0.5 映射到 [0, 1]。在 Shader 里用噪声时也要时刻记得它的值域:拿 [−1, 1] 的噪声直接当 lerp 的 t,一半的区域会超出范围。

线性空间下的灰度本书工程使用线性色彩空间,Shader 输出的 0.5 在屏幕上显示为约 73% 亮度的浅灰,而不是“中灰”。所以直接显示噪声值时,画面会整体偏亮、对比偏低。本章把噪声值作为
lerp 的权重在两种颜色之间混合,颜色属性本身会被正确转换;更系统的色彩空间讨论在第 9 章和第 13 章。