Unity Shader 系列(二十五):Unity 中的分形与程序化视觉
分形的无限自相似性在游戏中有着丰富的应用——从 Loading 界面的动态 Julia Set,到 Boss 战的程序化能量纹路,再到传送门的迷幻边框效果。本文聚焦 Unity URP 环境中的分形实现,包括全屏后处理分形、程序化雪花生成,以及 Compute Shader 高精度分形探索。
全屏后处理分形:Renderer Feature 实现
分形最常见的游戏用途是作为全屏后处理特效,比如传送门效果、Boss 技能前摇、游戏 Loading 动画。URP 通过自定义 Renderer Feature 实现全屏后处理。
C# Renderer Feature 框架
1 | |
Julia Set 全屏后处理 Shader
1 | |
Mandelbrot 传送门效果
将 Mandelbrot 集用作传送门的边框装饰:
1 | |
程序化雪花/晶体生成 Shader
Sierpinski 三角形变体可以生成美丽的雪花晶体图案,适合游戏 Loading 动画或 UI 装饰:
1 | |
Compute Shader 高精度分形探索
对于需要高精度交互式探索(如游戏内置分形艺术画廊),使用 Compute Shader 并行计算:
1 | |
游戏应用场景
程序化 Boss 动画:在 Boss 的材质 Shader 中叠加 Julia Set 动态图案,通过 C# 脚本随 Boss 血量调整 C 参数,血量越低分形越混乱:
1 | |
Loading 动画:使用前文的 Julia Set 后处理 Shader,在 _AnimSpeed 较高时产生快速变化的彩色分形作为视觉过渡。
UI 技能特效:将分形渲染到 RenderTexture,再将 RenderTexture 作为 UI 的 Raw Image 显示,可实现流动的技能冷却可视化。
ShaderGraph 实现思路
- Custom Function 节点:Julia Set 迭代无法用标准 ShaderGraph 节点实现,需要 Custom Function 节点嵌入 HLSL 代码
- Screen Position 节点:获取屏幕空间坐标转换为复平面坐标
- Time 节点:驱动 C 参数动画
- Emission 输出:分形颜色连接到 Emission 而非 Base Color,可配合 Bloom 后处理产生发光效果
性能考量
| 方案 | 适用场景 | 性能 |
|---|---|---|
| Fragment Shader(64 次迭代) | 全屏 UI/Loading | 中等(约 2ms@1080p) |
| Compute Shader(128 次迭代) | 交互式艺术画廊 | 高(GPU 并行最优) |
| 预计算纹理 | 静态背景/材质 | 极高(零运行时开销) |
| 实时 + 时域累积 | 高品质动画 | 中等(利用 TAA 积累细节) |
分形是”数学之美在像素上的映射”——在 Unity 的 Renderer Feature 框架下,一个精心设计的分形后处理效果可以让传送门、结界、魔法阵这类特效拥有令人难忘的视觉深度。
Unity Shader 系列(二十五):Unity 中的分形与程序化视觉
https://alex-rachel.github.io/2026/04/01/25-fractal-rendering/