Unity Shader Graph - 彩虹泡泡着色器
高级着色器彩虹泡泡着色器的核心原理与数学基础
彩虹泡泡的视觉本质与空间映射
高级着色器彩虹泡泡着色器效果本质是在二维曲面构建干涉色场(Interference Color Field),并结合薄膜干涉、菲涅尔折射等光学模型,模拟出"七彩泡泡膜"的视觉特征。其核心数学逻辑围绕以下两点展开:
- 薄膜干涉模拟 :利用薄膜厚度 d 和入射角 θ 的光程差公式
2nd*cos(θ),计算不同波长的光干涉相长/相消条件。 - 色散曲线拟合:通过经验公式将波长映射到可见光谱(RGB)的离散值,实现彩虹色谱的自然过渡。
关键数学特性
- 干涉条纹周期性 :光程差满足
2nd*cos(θ) = m*λ时产生相长干涉,m 为级数,λ 为波长。 - 色散非线性映射:将入射角 θ 通过多项式拟合映射到 RGB 三原色的强度曲线,实现彩虹渐变。
- 菲涅尔透射率约束:根据入射角调整透明度和反射比,边缘区域更亮(接近镜面)。
彩虹泡泡着色器的 Shader Graph 节点设计
核心节点功能概述
在 Unity Shader Graph 中实现彩虹泡泡着色器效果,需整合干涉计算、色散拟合、菲涅尔折射等节点,核心功能包括:
- 厚度场构建:利用噪声函数构建泡泡膜的表面厚度分布。
- 干涉颜色生成:根据光程差和入射角计算 RGB 分量的强度。
- 动态泡泡演化:通过时间变量模拟泡泡膨胀/收缩的动态过程。
关键端口与参数定义
| 端口名称 | 类型 | 功能说明 |
|---|---|---|
| World Position | Vector3 | 输入(只读),模型顶点的世界空间坐标 |
| Normal | Vector3 | 输入(只读),表面的法线向量 |
| View Direction | Vector3 | 输入(可调节/只读),视图方向 |
| Bubble Radius | Float | 输入(可调节),泡泡的半径大小 |
| Film Thickness | Float | 输入(可调节),薄膜的平均厚度 |
| Rainbow Intensity | Float | 输入(可调节),彩虹效应的强度 |
| Fade In Time | Float | 输入(可调节),泡泡出现的时间 |
| Bubble Color | Color | 输入(可调节),泡泡膜的基础颜色 |
| Master Color | Color | 输入(可调节),Master 节点的基础颜色 |
| Out Color | Vector4 | 输出,最终的着色器颜色 |
彩虹泡泡着色器的实现步骤(可复现)
前置准备
- 环境要求:Unity 2021.3+,URP 渲染管线,已安装 Shader Graph 插件。
- 素材准备:任意 3D 模型(如 Sphere),用于测试彩虹泡泡着色器效果。
- 创建基础 Shader:在 Project 窗口右键→Create→Shader→Universal Render Pipeline→Lit Shader Graph,命名为"RainbowBubbleVertexShader"。
步骤 1:构建薄膜厚度场
- 噪声叠加生成不规则厚度 :
- 添加"Simplex Noise"节点,输入为 World Position 的 XYZ 分量与 Bubble Radius 相乘的结果。
- 使用 FBM 叠加多层噪声(3~4 层),得到 0,1 范围的厚度分布场。
步骤 2:干涉颜色计算
- 光程差模拟 :
- 添加"Dot"节点,计算 Normal 与 View Direction 的点积(cosθ)。
- 添加"Multiply"节点,将 Film Thickness、cosθ、Rainbow Intensity 相乘,得到光程差值。
步骤 3:色散曲线拟合
- RGB 分量映射 :
- 创建三个"Remap"节点,分别对应 R/G/B 的强度曲线。
- 使用三次多项式拟合彩虹色谱(红→橙→黄→绿→青→蓝→紫)。
- 将光程差值通过不同的 Remap 组合映射到 RGB 三通道。
步骤 4:菲涅尔反射与透射混合
- 边缘高亮 :
- 添加"Dot"节点,计算 Normal 与 View Direction 的点积的绝对值(|cosθ|)。
- 使用"Remap"将结果重映射到 0,1(边缘处接近 1)。
- 添加"Multiply"节点,将 Bubble Color(反射部分)与菲涅尔值相乘。
步骤 5:泡泡动态演化
- 时间与厚度调制 :
- 添加"Sine"节点,将 Time、Fade In Time、Bubble Radius 组合输入。
- 使用"Smooth Step"控制泡泡的渐现/渐隐过程。
步骤 6:连接到 Master 节点
- 将最终颜色连接到 URP Lit Master 的 Base Color/Emission 端口。
步骤 7:保存并应用 Shader
- 保存着色器,创建材质并应用于场景模型,进入 Play 模式即可看到彩虹泡泡着色器效果。
彩虹泡泡着色器的实战调优与扩展案例
基础案例:肥皂泡效果(真实干涉色)
调整步骤
- 参数设置 :
- Bubble Radius:设为 2.0(中等大小)。
- Film Thickness:设为 0.3(薄膜厚度)。
- Rainbow Intensity:设为 1.5(中等彩虹强度)。
- 颜色配置:Bubble Color 设为 (0,0.8,1,1)(蓝紫色泡泡膜)。
进阶案例:糖果包装纸效果(高饱和度彩虹)
调整步骤
- 修改干涉计算:将 Rainbow Intensity 设为 3.0(增强彩虹效应)。
- 简化色散曲线:使用分段函数直接映射 RGB,而非多项式拟合。
- 颜色配置:Bubble Color 设为 (1,0.5,1,1)(紫色包装纸)。
高阶案例:多层泡泡叠加(复杂纹理)
实现步骤
- 复制厚度场与干涉计算:创建第二组泡泡节点,使用不同的 Bubble Radius。
- 透明度混合:将两层泡泡通过"Add+Alpha Mix"混合,模拟多个重叠的泡泡。
彩虹泡泡着色器的使用技巧与注意事项
薄膜厚度控制
- 典型范围:Film Thickness 建议设为 0.1~5.0(微米级)。
- 视觉效果:厚度越大,干涉条纹越密集。
性能优化
- 简化色散映射:使用 Remap 节点组合替代多项式拟合,减少 GPU 计算开销。
- 控制噪声层级:FBM 建议不超过 4 层。
常见问题排查
- 彩虹不明显:增加 Rainbow Intensity 或 Film Thickness。
- 颜色异常:检查色散曲线的 Remap 参数是否合理。
- 泡泡不动态:确保 Time 节点正确连接并调整 Fade In Time。
总结与拓展应用
总结
Unity Shader Graph 中的彩虹泡泡着色器核心是通过"薄膜厚度场构建 + 光程差干涉计算 + 色散曲线拟合",实现七彩泡泡膜的视觉效果。通过调整厚度、彩虹强度、半径等参数,可适配肥皂泡、糖果包装纸、奇幻道具等多种游戏/可视化需求。
拓展应用
- 交互吹气动画:结合粒子系统与气泡生成,当角色吹气时产生多个动态泡泡。
- 虹彩涂层模拟:将彩虹效果与物理涂层材质混合,实现电子产品外壳的虹彩装饰效果。
- 多层膜干涉叠加:创建不同厚度的多层膜,模拟复杂光学薄膜的实际物理特性。
**【Unity Shader Graph 使用与特效实现】**专栏 - 直达 (欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)