94.性能优化-GPU-着色器优化-降低填充率压力-反射探针
94.1 知识点
反射探针的作用
反射探针(Reflection Probe)用来捕捉某个空间内的环境反射信息。Unity 在场景中放置一个立方体探针,拍摄周围环境生成一张立方体贴图(Cubemap),运行时物体表面就能从中采样反射。简单来说:用一张 Cubemap 模拟物体周围的反射环境,让金属、玻璃等材质看起来有倒影感。
反射探针的原理
1. 烘焙阶段: Unity 以探针位置为中心渲染场景的 6 个方向(±X、±Y、±Z),生成一张 6 面的 Cubemap,包含该点周围环境的颜色和亮度信息。
2. 运行阶段: 对于反射性材质(如金属),Shader 在像素着色时根据法线方向在 Cubemap 中查找对应方向的颜色,作为反射光加入最终颜色。
3. 混合: 若物体位于多个反射探针之间,Unity 根据位置权重对反射贴图进行插值混合,保证反射在空间上连续、平滑。
反射探针的三种类型:
Baked(烘焙):只在烘焙时生成 Cubemap,运行时不更新。适用于静态场景、固定反射环境。Realtime(实时):运行中定时或每帧重新渲染 Cubemap,性能消耗较大。适用于镜面、水面、动态光照变化。Custom(自定义):手动指定 Cubemap。适用于特殊效果或自定义反射。
反射探针的使用
主要步骤
- 在场景中创建 Reflection Probe。
- 设置反射探针相关参数。
- 根据类型决定是否烘焙(烘焙型需要将静态物体勾选 Reflection Probe Static)。
- 设置对象让其支持反射探针:URP 在管线资源里设置;内置渲染管线在对象的 Renderer 组件上设置。
创建反射探针
右键 → Light → Reflection Probe。

创建后可以看到一个立方体 GameObject 挂着反射探针组件。

反射探针参数

Type(类型)

Baked(烘焙): 只在烘焙时生成 Cubemap,运行时不更新。最常用,适合静态场景、室内、固定反射环境。
Custom(自定义): 使用手动指定的 Cubemap;可勾选 Dynamic Objects 让动态物体出现在反射中。

Realtime(实时): 运行中定时或每帧重新渲染 Cubemap。

Refresh Mode(刷新模式):- On Awake:场景加载时更新一次。
- Every Frame:每帧重新渲染,效果最实时但消耗极高。
- Via Scripting:仅脚本手动调用时更新。

Time Slicing(时间切片):- All faces at once:一次渲染全部 6 面,占用一帧大量 GPU 时间。
- Individual faces:每帧只渲染一面,分摊到 6 帧,减少性能峰值。
- No time slicing:无切分优化,一次性全量渲染。

Runtime Settings(运行时设置)
- Importance:探针优先级,多探针影响同一区域时,权重高的优先。
- Intensity:反射亮度倍数;一般保持 1,偏暗可提高到 1.2–2。
- Box Projection:启用盒体投影,让 Cubemap 按包围盒进行位置校正,室内、走廊场景更贴近真实空间。
- Blend Distance:探针间的混合过渡距离;建议 0.5–2。
- Box Size:探针影响范围大小,一般设为能包裹目标区域。
- Box Offset:探针中心偏移,微调采样中心。
Cubemap Capture Settings(立方体纹理捕获设置)
- Resolution:Cubemap 每面分辨率;更清晰可用 256–1024,但增加内存。
- HDR:高动态范围捕捉,保留更宽亮度范围;推荐始终开启。
- Shadow Distance:捕获时的阴影距离;默认 100 足够。
- Clear Flags:捕获背景;通常选 Skybox。

- Background Color:Clear Flags 为 Solid Color 时的背景色。
- Culling Mask:哪些层包含进反射贴图;默认 Everything,可排除 UI、特效层。
- Occlusion Culling:捕获时是否启用遮挡剔除。
- Clipping Planes:近/远裁剪面;默认 Near=0.3、Far=1000 通常合适。
Bake(烘焙按钮)
点击 Bake 只烘焙当前选中的探针。点击下拉箭头可选择 Bake All Reflection Probes 烘焙场景中所有探针。

烘焙反射探针
复制多个反射探针,点击 Bake 只烘焙一个;如果想烘焙全部,点击下拉框选 Bake All Reflection Probes。


烘焙后可能发现反射贴图中没有周围的 Cube——这是因为需要将静态物体勾选 Reflection Probe Static(反射探针静态对象),才能被反射探针捕获。

勾选后重新烘焙,可以看到 Cubemap 中已经能反射 Cube 了。

设置对象支持反射探针
URP: 在 Project Settings → Graphics 的渲染管线资源中,确保 Reflection Probes 相关选项已启用(Probe Blending、Probe Atlas Blending、Box Projection 等)。

内置渲染管线: 在对象的 Renderer 组件上,将反射探测器设置为 Blend Probes 或 Blend Probes And Skybox。

验证反射效果
创建材质,将金属度和光滑度设为 1,给 Cube 设置不同颜色后重新烘焙,可以在反射球体上看到周围环境的倒影。移动球体时反射随之变化。为了更真实的效果,可以对反射探针使用更合理的布局。



反射探针布局技巧
- 室内房间:每个房间中心放一个探针,包围整个房间。
- 室外区域:每隔一段距离放探针,保证环境颜色平滑过渡。
- 镜面或金属地面:使用 Realtime 探针或自定义反射。
- 多层空间(楼上楼下):每层独立放置探针。
- 走廊、通道:间隔放置多个探针实现连续反射变化。
反射探针常见问题
| 问题 | 原因与解决 |
|---|---|
| 反射与环境颜色不符 | 探针位置错误或影响范围太小,调整 Box Size 与 Box Offset |
| 反射贴图模糊 | Cubemap 分辨率太低,提高 Resolution |
| 动态物体反射不更新 | 探针为 Baked,改为 Realtime 或手动更新 |
| 探针间反射突变 | 探针太稀疏,增加数量或增大 Blend Distance |
| 室内反射偏暗 | 提高 Intensity 到 1.3–2 |
| 反射拉伸失真 | 开启 Box Projection 并正确设置 Box Size |
| 反射边界突变 | 增大 Blend Distance 到 1–2 |
| 镜像效果不动 | 检查 Type 是否应从 Baked 改为 Realtime |
94.2 知识点代码
Lesson94_性能优化_GPU_着色器优化_降低填充率压力_反射探针.cs
public class Lesson94_性能优化_GPU_着色器优化_降低填充率压力_反射探针
{
#region 知识点一 反射探针的作用
// 反射探针捕捉空间内的环境反射信息,生成 Cubemap,
// 让金属、玻璃等反射性材质获得倒影效果。
#endregion
#region 知识点二 反射探针的原理
// 烘焙阶段:以探针为中心渲染 6 方向生成 Cubemap。
// 运行阶段:Shader 根据法线在 Cubemap 中查找反射颜色。
// 多探针时按位置权重插值混合,保证空间连续。
// 三种类型:Baked(静态)、Realtime(实时)、Custom(自定义 Cubemap)。
#endregion
#region 知识点三 反射探针的使用
// 1. 创建 Reflection Probe,设置参数。
// 2. 静态物体勾选 Reflection Probe Static 后烘焙。
// 3. URP 在管线资源启用 Probe Blending;内置管线在 Renderer 上设 Blend Probes。
// 布局:室内居中、室外间隔、走廊多段、每层独立。
// 常见问题:模糊提高分辨率、突变增大 Blend Distance、失真开 Box Projection。
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com