UPL9-15——反射探针

前置知识:

  1. US3S8L1——立方体纹理
  2. US3S8L2——天空盒
  3. US3S8L3——动态生成立方体纹理
  4. US3S8L4——反射效果

反射探针

反射探针(Reflection Probe)是用来捕捉某个空间内的环境反射信息的组件,Unity 通过在场景中放置一个 立方体探针(Cube Probe)
拍摄周围环境生成一个 立方体贴图(Cubemap),运行时动态物体或表面就能从中采样反射

说人话:反射探针用一张立方体贴图来模拟物体周围的反射环境,让金属、玻璃等材质看起来有倒影感

反射探针(Reflection Probe)的原理

  1. 烘焙阶段

    Unity 以探针位置为中心渲染场景的 6 个方向(±X, ±Y, ±Z)生成一张 6 面的立方体贴图(Cubemap)
    这张贴图包含该点周围环境的颜色和亮度信息

  2. 运行阶段

    对于反射性材质(如金属),Shader 在像素着色时,根据该像素的法线方向
    在 Cubemap 中查找对应方向的颜色,将结果作为反射光加入最终颜色

  3. 混合

    若一个物体位于多个反射探针之间,Unity 会根据位置权重对反射贴图进行插值混合,保证反射在空间上连续、平滑

总结:反射探针就是预先烘焙好立方体贴图,当有反射效果的对象经过探针区域时,会使用该贴图进行着色,并且会帮助我们处理多探针之间的混合

注意:反射探针分为:

  1. 烘焙反射探针

    适用于:静态场景、固定反射

  2. 实时反射探针

    每帧渲染 6 张图,性能消耗较大,适用于:镜面、水面、动态光照变化

  3. 自定义反射探针

    手动指定对应的立方体贴图,适用于:特殊效果或自定义反射

反射探针(Reflection Probe)的使用

  1. 在场景中创建 Reflection Probe(反射探针)

    在 Hierarchy 窗口内右键选择 Light —— Reflection Probe 即可创建

    image

  2. 根据对象类型决定是否烘焙进反射探针的立方体贴图内

    注意,如果要将物体烘焙至反射探针内,需要将静态物体勾选 Reflection Probe Static(反射探针静态对象)

    image

  3. 设置 Reflection Probe(反射探针)相关参数

    具体参数见下文:反射探针(Reflection Probe)的参数
    Reflection Probe 类型为 Baked 或者 Custom 时,点击 Bake 即可烘焙

    image

    烘焙后,即可在下方的预览窗口内看到反射内容:

    image

  4. 设置对象让其支持反射探针

    • URP:在管线资源里设置

      image

    • 内置渲染管线:在对象的 Renderer 组件上设置

      image

  5. 动态物体使用支持反射探针的 Shader 的材质,并调节其金属度和光滑度

    以 URP 的 Lit Shader 为例:

    image

    这样就能让使用此材质的物体出现反射效果

    image

反射探针布局技巧

  1. 室内房间

    每个房间中心放一个探针,包围整个房间

  2. 室外区域

    每隔一段距离放探针,保证环境颜色平滑过渡

  3. 镜面或金属地面

    使用 Realtime 探针或自定义反射

  4. 多层空间(楼上楼下)

    每层独立放置探针

  5. 走廊、通道

    间隔放置多个探针实现连续反射变化

反射探针常见问题

  1. 反射与环境颜色不符

    探针位置错误或影响范围太小,调整 Box Size 与 Box Offset

  2. 反射贴图模糊

    Cubemap 分辨率太低,提高 Resolution

  3. 动态物体反射不更新

    探针为 Baked 类型,改为 Realtime 或手动更新

  4. 探针间反射突变

    探针太稀疏,增加探针数量或开启混合

  5. 室内(反射偏暗)

    提高 Intensity 到 1.3 ~ 2

  6. 反射拉伸失真

    开启 Box Projection(矩形投影)并正确设置 Box Size(盒子大小)

  7. 反射边界突变

    增大 Blend Distance(混合距离)到 1 ~ 2

  8. 镜像效果不动

    检查 Type = Baked 是否应改为 Realtime

反射探针(Reflection Probe)的参数

image

  • Type:类型

    image

    • Baked(烘焙)

      烘焙型探针,只在光照烘焙时生成 Cubemap,运行时不会更新
      适用于静态场景、室内、固定反射环境(最常用)

    • Custom(自定义)

      使用手动指定的 Cubemap 贴图
      适用于特效或自定义反射环境

      image

      • Dynamic Objects(动态对象)

        这个复选框控制 是否让动态物体(比如移动的角色、车辆)出现在反射中

      • Cubemap(自定义的 Cubemap 贴图)

    • Realtime(实时)

      实时探针,运行中每帧或定时重新渲染 Cubemap
      适用于动态场景、移动镜面、水面等

      image

      • Refresh Mode:刷新模式

        image

        • On Awake:仅在场景加载或探针启用时更新一次

          启动时生成一次反射,不会再次更新

        • Every Frame:每一帧都重新渲染反射

          最实时的效果,但性能消耗极高

        • Via Scripting:仅在脚本中手动调用时更新

          用于自定义控制(例如每隔几秒更新一次)

      • Time Slicing:时间切片

        image

        • All Faces at Once:一次性渲染所有 6 个面

          占用一帧大量 GPU 时间,但最快完成
          有一点时间切分优化,但用户看不出来

        • Individual Faces:每帧只渲染一个面

          平均分摊到 6 帧内,减少性能峰值

        • No Time Slicing:没有时间切片,一次性渲染完

          没有时间切分优化,最直接的全量渲染

  • Runtime Settings(运行时设置)

    • Importance(重要性)

      探针优先级(用于探针混合时决定哪个更重要)
      当多个探针影响同一区域时,可手动提高靠近主要物体的探针权重

    • Intensity(强度)

      反射亮度强度倍数
      调整反射亮度。一般保持 1
      如果反射偏暗可提高到 1.2 ~ 2

    • Box Projection(是否启用矩形投影)

      启用盒体投影(Box Projection)
      让 Cubemap 按包围盒尺寸进行位置校正
      勾选后可使反射看起来更贴近真实空间(如室内、走廊)

    • Blend Distance(混合举例)

      探针与周围探针或天空盒反射的混合过渡距离
      数值越大,边界过渡更平滑
      建议 0.5 ~ 2

    • Box Size (X,Y,Z)(盒子尺寸)

      探针影响范围(立方体大小) 决定该探针影响哪些物体
      一般设置为能包裹目标区域的大小

    • Box Offset (X,Y,Z)(盒子偏移)

      探针中心相对于物体位置的偏移
      可用于微调探针采样中心,使反射效果更合理

  • Cubemap Capture Settings(立方体纹理捕获设置)

    • Resolution(分辨率)

      生成 Cubemap 的分辨率(每个面像素数)
      更清晰的反射可用 256~1024,但性能和内存消耗增加

    • HDR(是否启用高动态范围)

      是否以高动态范围(HDR)捕捉反射
      可以保留更宽亮度范围,用于 PBR 材质(推荐始终开启)

    • Shadow Distance(阴影距离)

      捕获反射贴图时的阴影距离
      影响 Cubemap 内阴影质量
      默认 100 足够

    • Clear Flags(清除标记)

      捕获 Cubemap 时的背景
      通常选 Skybox(用天空盒填充背景)

      image

      • Skybox:天空盒
      • Solid Color:固定颜色
    • Background Color(背景光颜色)

      若 Clear Flags 选择 Solid Color 时的背景颜色
      仅在不使用 Skybox 时生效

    • Culling Mask(剔除遮罩)

      哪些层的物体会被包含进反射贴图
      默认 Everything,可排除 UI、特效层等非真实物体

    • Occlusion Culling(遮挡剔除)

      是否在捕获时启用遮挡剔除
      勾选提高性能,仅当场景中有遮挡数据时有效

    • Clipping Planes(裁剪平面)

      捕获摄像机的近、远裁剪平面
      控制捕获深度范围
      默认 Near = 0.3、Far = 1000 通常合适

  • Bake(烘焙按钮)

    点击 Bake,Unity 立即以该探针为中心渲染 6 个方向
    结果会保存在 LightingData.asset 中