时间:2025-09-14 11:41
人气:
作者:admin
Unity URP(Universal Render Pipeline)中的光照模型BRDF(双向反射分布函数)是PBR(基于物理的渲染)的核心组成部分,用于模拟真实世界的光照交互。
【从UnityURP开始探索游戏渲染】专栏-直达
BRDF函数描述入射光方向(ωi)和出射光方向(ωo)的反射关系,核心公式为:
fr(ωi,ωo)=出射辐亮度入射辐照度
关键理论包括:
法线分布函数(NDF):如GGX描述微表面法线分布。
几何遮蔽函数(G):如Smith模型处理自遮挡。
菲涅尔项(F):计算基础反射率。完整公式:fr=4⋅(ωi⋅n)⋅(ωo⋅n)D(ωh)⋅F(ωi)⋅G(ωi,ωo)其中,ωh为半向量,n为表面法线。
fr=D(ωh)⋅F(ωi)⋅G(ωi,ωo)4⋅(ωi⋅n)⋅(ωo⋅n)
在Unity URP中,BRDF通过Shader实现,核心应用包括:
// 漫反射(Lambert)
float3 diffuse = albedo * saturate(dot(lightDir, normal));
// 高光反射(Blinn-Phong)
float3 specular = pow(saturate(dot(halfVector, normal)), shininess) * specularStrength;
结合环境光和自发光,形成完整光照。
金属度(Metallic)和粗糙度(Roughness)参数控制BRDF行为。
示例:URP Shader中集成GGX NDF和菲涅尔项:实现真实金属/非金属反射。
float3 F0 = mix(vec3(0.04), baseColor, metallic);
float3 F = F0 + (1.0 - F0) * pow(1.0 - max(dot(halfVector, viewDir), 0.0), 5.0);
float3 specular = (D * F * G) / (4.0 * max(dot(normal, viewDir), 0.0) * max(dot(normal, lightDir), 0.0));
BRDF(双向反射分布函数)与标准光照模型(如Phong模型)是计算机图形学中描述光照交互的两种不同方法,二者在理论基础、计算方式和应用场景上存在显著差异。
(v·r)^n)计算,缺乏物理依据,仅依赖经验参数(如高光指数n)。| 特性 | BRDF模型 | Phong模型 |
|---|---|---|
| 反射计算 | 基于微表面理论,分项计算D/F/G | 直接使用(v·r)^n计算高光 |
| 能量守恒 | 严格满足(如菲涅尔项限制反射率) | 可能超出(如高光指数n过大) |
| 参数意义 | 物理参数(粗糙度、金属度) | 经验参数(光泽度、高光强度) |
【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,????)