【Unity Shader Graph 使用与特效实现】专栏-直达
Unity Shader Graph – 黑洞扭曲效果
扭曲着色器黑洞扭曲效果的核心原理与数学基础
黑洞扭曲的视觉本质与空间映射
扭曲着色器黑洞扭曲效果本质是在三维空间中构建引力透镜场(Gravitational Lens Field),并结合广义相对论的光线偏折模型,模拟出"时空扭曲"的视觉特征。其核心数学逻辑围绕以下两点展开:
- 引力势场分布:利用牛顿引力势函数(Φ = -GM/r)在空间构建引力场分布,黑洞周围的时空扭曲程度由质量参数控制。
- 光线偏折模拟:通过近似公式 deflectionAngle = 4GM/(c²*r) 计算光线经过黑洞附近的偏折量,实现视觉上的图像扭曲。
关键数学特性
- 球对称性:黑洞引力场在球形区域内呈现径向对称分布,适用于任意朝向的模型表面。
- 奇点附近发散:当空间坐标接近黑洞中心时,扭曲效果急剧增强(通过阈值保护避免数值溢出)。
- 值域平滑映射:将无限大的偏折角度通过 Sigmoid 函数压缩到有限范围,保证视觉效果的稳定性。
黑洞扭曲效果的 Shader Graph 节点设计
核心节点功能概述
在 Unity Shader Graph 中实现黑洞扭曲效果,需整合距离采样、向量场扰动、色度混合等节点,核心功能包括:
- 黑洞中心采样:获取黑洞中心点的世界空间坐标。
- 动态时间驱动:通过 Time 节点获取实时时间,控制扭曲的动态变化节奏。
- 扭曲强度调节:利用噪声函数构建时空扰动的不均匀性分布。
关键端口与参数定义
| World Position | Vector3 | 输入(只读),模型顶点的世界空间坐标 |
| BlackHole Pos | Vector3 | 输入(可调节),黑洞中心的位置 |
| BH Mass | Float | 输入(可调节),黑洞的质量大小 |
| Twist Intensity | Float | 输入(可调节),扭曲效果的强度 |
| View Direction | Vector3 | 输入(只读),摄像机到表面的视图方向 |
| Distortion Color | Color | 输入(可调节),扭曲区域的显示颜色 |
| Normal Color | Color | 输入(可调节),正常区域的显示颜色 |
| Time Warp Speed | Float | 输入(可调节),时间扭曲的速度 |
| Noise Scale | Float | 输入(可调节),噪声缩放比例 |
| Master Color | Color | 输入(可调节),Master 节点的基础颜色 |
| Out Color | Vector4 | 输出,最终的着色器颜色 |
黑洞扭曲效果的实现步骤(可复现)
前置准备
步骤 1:计算空间到黑洞中心的距离场
- 添加 Distance 节点:将 World Position 与 BlackHole Pos 连接到 In 和 Target 端口,输出空间到黑洞中心的距离。
- 命名输出为"distToBH"。
步骤 2:构建引力扭曲强度场
- 引力势计算:
- 添加"Multiply"节点,将 BH Mass 与 Twist Intensity 相乘。
- 添加"Divide"节点,将上述结果除以 distToBH(加一个小偏移量如 0.5 避免除零)。
- 阈值保护:使用"Smooth Step"将过大的扭曲值限制在合理范围内。
步骤 3:时空扰动模拟
- 噪声叠加:
- 添加"Simplex Noise"节点,输入为 World Position 的 XYZ 分量与 Noise Scale 相乘的结果。
- 添加多个噪声层并加权叠加(FBM)模拟时空的不均匀扰动。
步骤 4:扭曲区域的色度混合
- 扭曲遮罩生成:
- 使用"Remap"节点将 distToBH 从 [min,max] 重映射到 [0,1],以扭曲强度场作为遮罩。
- 添加"Multiply"节点,将 Distortion Color 与遮罩相乘。
- 正常区域保留:添加"Multiply"节点,将 Normal Color 与 (1-遮罩) 相乘。
- 颜色混合:使用"Add"节点将扭曲区域与正常区域相加。
步骤 5:连接到 Master 节点
- 将最终颜色连接到 URP Lit Master 的 Base Color/Emission 端口。
步骤 6:保存并应用 Shader
- 保存着色器,创建材质并应用于场景模型,进入 Play 模式即可看到黑洞扭曲效果。
黑洞扭曲效果的实战调优与扩展案例
基础案例:虫洞穿梭效果(科幻通道)
调整步骤
- BH Mass:设为 5.0(中等质量)。
- Twist Intensity:设为 3.0(中等扭曲)。
- Distortion Color:设为 (0,0.5,1,1)(蓝紫色能量场)。
进阶案例:时空涟漪动态扭曲(动态演化)
调整步骤
- Time Warp Speed:设为 2.0(快速变化)。
- Noise Scale:设为 1.5(中等尺度的扰动)。
高阶案例:多重黑洞引力场叠加
实现步骤
黑洞扭曲效果的使用技巧与注意事项
空间坐标选择
- 世界空间:黑洞固定于场景,适合科幻游戏中的虫洞/黑洞场景。
- 对象空间:黑洞随模型移动,适合角色周围的能量场装饰。
性能优化
- 限制扭曲范围:仅在靠近黑洞的区域应用扭曲效果,远离时提前淡出。
- 控制噪声复杂度:FBM 建议不超过 4 层。
常见问题排查
- 扭曲效果过强:降低 Twist Intensity 或 BH Mass 值。
- 场景闪烁:确保 Time 节点使用 Smooth Time 而非直接 Time。
总结与拓展应用
总结
Unity Shader Graph 中的黑洞扭曲效果核心是通过"距离场采样 + 引力势计算 + FBM 时空扰动",实现时空弯曲的视觉转换。通过调整质量、扭曲强度、噪声尺度等参数,可适配虫洞场景、能量场装饰、科幻道具等多种游戏/可视化需求。
拓展应用
- 交互黑洞穿梭:结合射线检测与距离场,当玩家靠近黑洞中心时触发扭曲增强效果,用于游戏机制的时空传送功能。
- 黑洞吸积盘模拟:将扭曲效果与径向梯度结合,模拟黑洞周围物质被吸入的动态过程。
- 多重奇点系统:创建多个黑洞中心,实现复杂的引力透镜效应叠加,适合科幻大片级别的场景渲染。
【Unity Shader Graph 使用与特效实现】专栏 – 直达 (欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)



