找回密码
 立即注册
首页 业界区 业界 【光照】Unity[PBR]环境光中的[漫反射]

【光照】Unity[PBR]环境光中的[漫反射]

柄利 5 小时前
【从UnityURP开始探索游戏渲染】专栏-直达
漫反射辐照的核心作用

漫反射辐照(Diffuse Irradiance)在URP PBR中用于模拟环境光对物体表面的均匀散射效果,通过预计算环境立方体贴图的低频光照信息,为动态物体提供间接漫反射光照。其核心公式为:
$L_d=\frac{c}{\pi}\int_\Omega L_i(\omega_i)(n\cdot\omega_i)d\omega_i$
其中c为反照率,$L_i$为环境光强度。
其核心是将环境立方体贴图卷积为球谐系数(SH)或光照探针数据。计算过程遵循Lambertian反射模型.
技术演进关键节点


  • Unity 5.x时代
    首次引入标准PBR管线,但依赖内置渲染管线,环境光计算需全分辨率立方体贴图,内存消耗大。
  • URP 7.x 2020
    采用三层球谐基函数压缩环境光数据,内存占用降低90%以上,同时支持动态光照探针混合,实现移动端高效运行。
  • URP 2022
    引入HDR环境贴图支持,提升高动态范围场景下漫反射辐照的精度,通过RGBM编码解决LDR贴图亮度失真问题。
解决的问题与方案优势

传统问题


  • 动态物体无法复用静态光照贴图,导致场景光照不连贯。
  • 实时积分计算环境光性能开销过高,尤其在移动端。
URP方案选择原因

<ul>‌球谐函数压缩‌:用9个系数(三层SH)近似环境光分布,相比立方体贴图减少90%内存占用。
球谐系数(SH)卷积计算原理


  • 环境立方体贴图到球谐系数的转换过程分为两步:

    • 首先对立方体贴图进行蒙特卡洛积分,计算各阶球谐基函数的投影系数;
    • 然后在运行时通过法线向量重建光照。

  • 核心公式为:
$c_{l,m}=\int_\Omega L_i(\omega)Y_{l,m}(\omega)d\omega$
其中$Y_{l,m}$为球谐基函数,$L_i$为环境光强度。Unity采用三阶SH(9个系数),仅需存储RGB三个通道的9个浮点数,相比立方体贴图内存占用减少99.8%。
具体实现步骤

<ul>‌预计算阶段
对立方体贴图的每个纹素进行半球积分,计算0-2阶球谐系数:
[code]hlsl// 伪代码:立方体贴图投影到SHfor each texel in cubemap {    float3 dir = normalize(texelDirection);    float3 color = SampleCubemap(texel);    for (int l=0; l

相关推荐

您需要登录后才可以回帖 登录 | 立即注册