任修 发表于 2025-9-25 14:37:11

【光照】Unity中的[物理模型]PBR

【从UnityURP开始探索游戏渲染】专栏-直达
PBR(Physically Based Rendendering)的核心内容与BRDF应用‌

PBR是一种基于物理光学原理的渲染框架,其核心是通过‌物理可测量的材质属性‌和‌真实的光照计算规则‌实现跨环境一致的真实感渲染。
‌PBR四大核心支柱‌

模块作用关键参数‌材质参数系统‌定义物体固有光学属性金属度(Metallic)粗糙度(Roughness)基础反射率(Albedo)‌微表面理论‌描述微观几何对光的影响法线分布(NDF)几何遮蔽(G)菲涅尔(F)‌能量守恒约束‌确保物理正确性漫反射+镜面反射≤入射光能‌线性工作流‌模拟真实光强度HDR环境光照伽马校正BRDF和PBR的关系

BRDF(双向反射分布函数)与PBR(基于物理的渲染)是计算机图形学中紧密关联的两个概念.
理论层级关系


[*]‌BRDF是PBR的数学基础‌
BRDF通过微表面理论(Microfacet Theory)描述光线与物体表面的交互,定义了入射光方向(ωi)与出射光方向(ωo)的反射比例关系‌。
PBR则基于BRDF构建完整的渲染流程,通过物理参数(如粗糙度、金属度)实现真实材质模拟‌。
[*]‌PBR的三大核心条件‌

[*]微表面理论(BRDF的物理基础)
[*]能量守恒(BRDF需满足反射率≤1)
[*]基于物理的BRDF(如Cook-Torrance模型)‌

技术实现差异

特性BRDFPBR‌作用范围‌局部反射计算(单点光照)全局渲染流程(含IBL、阴影等)‌参数化‌数学函数(如GGX、Schlick)材质系统(URP/Standard Shader)‌物理准确性‌高(需满足能量守恒)更高(整合多物理效应)Unity中的实际应用


[*]‌BRDF实现‌

[*]URP的BRDF.hlsl文件包含GGX法线分布、菲涅尔项等核心计算‌。
[*]示例:BRDF_Unity_PBS函数组合漫反射与镜面反射‌。

[*]‌PBR流程‌

[*]通过Lighting.hlsl整合BRDF与IBL(环境光遮蔽)‌。
[*]材质参数(如_Metallic)直接控制BRDF行为‌。

演进与扩展


[*]‌从BRDF到PBR‌:BRDF解决了Phong模型非物理问题,PBR进一步扩展至全局光照(如IBL)和材质系统‌。
[*]‌现代应用‌:URP/Standard Shader均采用PBR流程,但底层仍依赖BRDF的数学实现‌
BRDF(PBR)实现

核心脚本‌


[*]BRDF.hlsl(路径:Packages/com.unity.render-pipelines.universal/ShaderLibrary/)
[*]关键类:BRDFData(存储粗糙度、金属度等参数)和Lighting.hlsl(处理光照计算)
‌实现方法‌


[*]‌GGX法线分布函数‌:
hlsl
float D_GGX(float NdotH, float roughness) {
    float a = roughness * roughness;
    return a / (PI * pow((NdotH * NdotH * (a - 1.0) + 1.0), 2.0));
}
[*]‌菲涅尔项 Schlick近似‌:其中F0为基础反射率(金属材质为0.9,非金属为0.04)
hlsl
float3 F_Schlick(float3 F0, float VdotH) {
    return F0 + (1.0 - F0) * pow(1.0 - VdotH, 5.0);
}
‌调用流程‌


[*]在Shader中通过#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"引入
[*]最终调用BRDF_Unity_PBS函数组合漫反射和镜面反射
自定义扩展


[*]‌新增光照模型‌

[*]修改StencilUsage.cs定义新的Stencil值(如MaterialCustom)
[*]在GBufferPass.cs中添加对应Shader Tag和Stencil写入逻辑

[*]‌参数调整‌

[*]标准光照模型:通过Material面板调整_Specular和_Glossiness
[*]BRDF模型:调整_Metallic和_Smoothness参数

对比总结

特性标准光照模型BRDF模型‌实现文件‌SimpleLit.shaderBRDF.hlsl + Lighting.hlsl‌核心函数‌UniversalFragmentBlinnPhongBRDF_Unity_PBS‌物理准确性‌低(经验模型)高(微表面理论)如需深度定制,建议参考URP官方Shader库中的Lighting.hlsl和BRDF.hlsl实现
‌BRDF在PBR中的具体应用‌

PBR通过分解BRDF实现光照计算,以下是各部分的实现原理:
‌镜面反射计算(Cook-Torrance BRDF)

PBR直接调用BRDF的微表面模型:
$f_{spec}=\frac{F⋅D⋅G}{4(n⋅ω_i)(n⋅ω_o)}$
<ul>
‌<strong>
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 【光照】Unity中的[物理模型]PBR