news 2026/6/10 19:09:10

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【光照】Unity[PBR]环境光中的[漫反射]

漫反射辐照的核心作用

漫反射辐照(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方案选择原因‌

‌球谐函数压缩‌:用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%。

具体实现步骤

‌预计算阶段‌

对立方体贴图的每个纹素进行半球积分,计算0-2阶球谐系数:

hlsl

// 伪代码:立方体贴图投影到SH

for each texel in cubemap {

float3 dir = normalize(texelDirection);

float3 color = SampleCubemap(texel);

for (int l=0; l<=2; ++l) {

for (int m=-l; m<=l; ++m) {

SHCoeff[l][m] += color * SHBasis(l,m,dir) * solidAngle;

}

}

}

实际工程中会使用重要性采样优化计算量。

‌运行时重建‌

在Shader中通过法线向量与预计算系数的点积快速重建光照:

hlsl

// URP中的SH重建代码(简化版)

float3 SampleSH(float3 normalWS) {

float4 vB = normalWS.xyzz * normalWS.yzzx;

float3 x1 = float3(dot(unity_SHAr, normalWS),

dot(unity_SHAg, normalWS),

dot(unity_SHAb, normalWS));

float3 x2 = float3(dot(unity_SHBr, vB),

dot(unity_SHBg, vB),

dot(unity_SHBb, vB));

return x1 + x2 + unity_SHC.rgb;

}

此代码对应三阶SH重建公式:

$L(n)=\sum_{l=0}{2}\sum_{m=−l}c_{l,m}Y_{l,m}(n)$

该技术解决了动态物体无法实时计算全局光照的问题,通过球谐函数(SH)或光照探针存储预计算数据,显著降低实时渲染开销。

‌探针混合‌:动态物体通过插值邻近探针数据实现平滑过渡,避免光照突变。

光照探针数据生成

‌探针烘焙‌

每个光照探针位置会生成球谐系数,通过射线追踪计算周围几何体的间接光照。Unity使用伴随勒让德多项式作为基函数,存储7个half4变量(unity_SHAr至unity_SHC)。

‌动态物体采样‌

动态物体通过插值邻近探针的SH系数实现光照混合:

hlsl

// 探针混合伪代码

float3 GetProbeIrradiance(float3 position) {

Probe probes = FindNearbyProbes(position);

float3 sh = lerp(probes[0].SH, probes[1].SH, weight);

return SampleSH(sh, normalWS);

}

该方案解决了动态物体与环境光的一致性问题

‌硬件优化‌:SH计算使用GPU并行,在Shader中通过SampleSH函数直接采样,避免实时积分。

技术对比优势

方案 内存占用 计算开销 适用场景

立方体贴图 6MB+ 高 静态环境反射

球谐光照(SH) 108字节 极低 动态物体漫反射

光照探针 可变 中 复杂动态场景

SH方案通过基函数投影实现高频信息剔除,特别适合Lambertian漫反射的低频特性。Unity选择该方案因其在移动端可实现0.5ms内的环境光重建,且支持动态更新.

具体实现示例

在URP Shader中,漫反射辐照通过以下HLSL代码实现:

hlsl

// 球谐采样

float3 irradiance = SampleSH(normalWS);

// 结合材质反照率

float3 diffuse = albedo * irradiance;

此过程将预计算的球谐系数与表面法线点乘,重建环境光照。例如,金属材质通过调整反照率c控制能量守恒,非金属材质则保留更多散射光。

镜面IBL的协同作用

镜面IBL(Specular IBL)通过分裂求和近似(Split Sum Approximation)处理高光反射,与漫反射辐照共同构成完整的PBR环境光照模型。预滤波环境贴图(粗糙度分级)和BRDF LUT分别处理光线散射与菲涅尔效应,公式为:

$L_s=\int_\Omega f_r(\omega_i,\omega_o)L_i(\omega_i)(n\cdot \omega_i)d\omega_i$

其中fr为BRDF函数。Unity选择此方案因其在移动端仅需两次纹理采样即可实现物理精确的高光反射,平衡性能与效果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:56:50

Next.js配置进阶:从基础到企业级实践全指南

Next.js配置进阶&#xff1a;从基础到企业级实践全指南 【免费下载链接】next.js The React Framework 项目地址: https://gitcode.com/GitHub_Trending/next/next.js 在现代React应用开发中&#xff0c;Next.js以其强大的约定优于配置理念赢得了开发者的青睐。然而&…

作者头像 李华
网站建设 2026/6/10 14:06:53

毕设开源 深度学习yolov11痤疮检测医疗辅助系统(源码+论文)

文章目录0 前言1 项目运行效果2 课题背景2.1、痤疮的医学背景与社会影响2.2、传统痤疮诊断方法的技术局限2.2.1 视觉评估法2.2.2 摄影记录法2.2.3 皮肤镜检测2.3、计算机视觉在皮肤病诊断中的发展3.1 早期图像处理方法(2000-2010)2.3.2 机器学习时代(2011-2015)2.4、深度学习带…

作者头像 李华
网站建设 2026/6/9 22:14:39

频域中的数字下变频 详解与python仿真

核心概念&#xff1a;什么是“数字下变频”&#xff1f;简单说&#xff0c;天线接收到的信号频率通常很高&#xff08;比如图中的 75MHz&#xff09;&#xff0c;就像在一辆高速飞驰的列车上。但是我们的计算机&#xff08;DSP/FPGA&#xff09;想要仔细处理这个信号&#xff0…

作者头像 李华
网站建设 2026/6/9 23:14:11

5分钟快速上手IoTSharp:构建你的专属物联网平台

5分钟快速上手IoTSharp&#xff1a;构建你的专属物联网平台 【免费下载链接】IoTSharp IoTSharp is an open-source IoT platform for data collection, processing, visualization, and device management. 项目地址: https://gitcode.com/gh_mirrors/io/IoTSharp 想要…

作者头像 李华
网站建设 2026/6/10 14:03:18

基于SSM+Vue的社区团购系统小程序的设计与实现

社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。手机也逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个会员的使用。手机具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合自己要求的操作系统是非…

作者头像 李华
网站建设 2026/6/10 14:07:21

Day 32

DAY 32 昨天我们已经介绍了如何在不同的文件中&#xff0c;导入其他目录的文件&#xff0c;核心在于了解导入方式和python解释器检索目录的方式。 搞清楚了这些&#xff0c;那我们就可以来看看&#xff0c;如何把一个文件&#xff0c;拆分成多个具有着独立功能的文件&#xf…

作者头像 李华