Directx11进阶教程PBR(2)之BRDF

本文详细探讨了物理基于渲染(PBR)中的双向反射分布函数(BRDF)及其在图形渲染中的应用,包括Cook-Torrance模型的组成部分:法线分布函数、几何衰减函数和菲涅尔函数。文章还介绍了漫反射和镜面反射的区别,以及各种函数模型如GGX-NDF和Lambert-Diffuse的实际使用。

PBR单位

电磁辐射的测量是辐射度学。有很多的辐射量单位来描述物体表面接受的光照,但是图形渲染经常用RGB三色谱来作为单位, 也就是float3.

BRDF基本属性

普通认为, 光照shading是在局部进行的, 在上面PBR物理现象的图17可以看出来。这种情况下,我们用 代表作为从物体表面观察点到人眼睛的单位方向向量,用 L 代表物体表面观察点的入射光的反方向单位向量。物体对光的交互关系用双向反射分布函数(BRDF)来描述,也就是有关于:“一个物体表面点在给定的入射光照方向L和给定的观察方向V,会表现如何的函数。如下图所示:

当然,入射光照方向L和观察方向V通常都是认定为表面之上的, 也就是dot(n, L)和dot(n, V)都是非负数的。

BRDF现象可以表达为两种方式,下面两种都是正确有效的

(1)多束不同方向的光在一个表面点的反射方向都为V。

(2)一束特定方向的入射光反射出多个方向的光。

(这里在IBL的specular重要性采样中计算可以用上面的理论来解释)

BRDF计算采用的是光谱单位,但是上面我们提过了图形渲染通常采用的RGB三色谱单位,所以BRDF里面代入的各种光照值也是RGB三色谱值。

BRDF在光照方程式中使用,方程式:

这个光照方程式告诉我们一个点的表现等于沿着该点各种方向的入射光照的微积分计算.

BRDF函数在光照计算中,遵循两大定律:

(1)光照的交互率,即把入射光照方向和观察方向V的函数位置调换后,计算的值还是一样的。数学上,表达为下面:

(2)能量守恒定律, 也就是反射出去能量不能超过入射的能量, 能量不是凭空产生.数学上,表达为下面:

 

BRDF描述了上篇博客提到两大光照交互现象, 光的反射现象和光的次表面散现象,但是由于我们本篇PBR形容的都是普通材质,次表面效果都近视为漫反射效果。所以这里的BRDF两大现象为:

(1)镜面反射(specular)

(2)漫反射(diffuse)

 BRDF函数通常也是根据光交互两大物理现象分化为 镜面反射项(specular term)和漫反射项(diffuse).如下所示:

 

BRDF函数模型

上面提出了BRDF函数的各种属性,图形学界这么多年来很多研究者提出了各种满足BRDF函数的具体模型。

但是目前渲染业界最常用计算BRDF的specular项是Cook-Torrance函数模型,而计算diffuse的是Lambert-diffuse,如下所示

不错的dx11入门教程 Tutorial 1: Setting up DirectX 11 with Visual Studio Tutorial 2: Creating a Framework and Window Tutorial 3: Initializing DirectX 11 Tutorial 4: Buffers, Shaders, and HLSL Tutorial 5: Texturing Tutorial 6: Diffuse Lighting Tutorial 7: 3D Model Rendering Tutorial 8: Loading Maya 2011 Models Tutorial 9: Ambient Lighting Tutorial 10: Specular Lighting Tutorial 11: 2D Rendering Tutorial 12: Font Engine Tutorial 13: Direct Input Tutorial 14: Direct Sound Tutorial 15: FPS, CPU Usage, and Timers Tutorial 16: Frustum Culling Tutorial 17: Multitexturing and Texture Arrays Tutorial 18: Light Maps Tutorial 19: Alpha Mapping Tutorial 20: Bump Mapping Tutorial 21: Specular Mapping Tutorial 22: Render to Texture Tutorial 23: Fog Tutorial 24: Clipping Planes Tutorial 25: Texture Translation Tutorial 26: Transparency Tutorial 27: Reflection Tutorial 28: Screen Fades Tutorial 29: Water Tutorial 30: Multiple Point Lights Tutorial 31: 3D Sound Tutorial 32: Glass and Ice Tutorial 33: Fire Tutorial 34: Billboarding Tutorial 35: Depth Buffer Tutorial 36: Blur Tutorial 37: Coming Soon... DirectX 10 Tutorials: Tutorial 1: Setting up DirectX 10 with Visual Studio Tutorial 2: Creating a Framework and Window Tutorial 3: Initializing DirectX 10 Tutorial 4: Buffers, Shaders, and HLSL Tutorial 5: Texturing Tutorial 6: Diffuse Lighting Tutorial 7: 3D Model Rendering Tutorial 8: Loading Maya 2011 Models Tutorial 9: Ambient Lighting Tutorial 10: Specular Lighting Tutorial 11: 2D Rendering Tutorial 12: Font Engine Tutorial 13: Direct Input Tutorial 14: Direct Sound Tutorial 15: FPS, CPU Usage, and Timers Tutorial 16: Frustum Culling Tutorial 17: Multitexturing and Texture Arrays Tutorial 18: Light Maps Tutorial 19: Alpha Mapping Tutorial 20: Bump Mapping Tutorial 21: Specular Mapping Tutorial 22: Render to Texture Tutorial 23: Fog Tutorial 24: Clipping Planes Tutorial 25: Texture Translation Tutorial 26: Transparency Tutorial 27: Reflection Tutorial 28: Screen Fades Tutorial 29: Water Tutorial 30: Multiple Point Lights Tutorial 31: 3D Sound Tutorial 32: Glass and Ice Tutorial 33: Fire Tutorial 34: Billboarding Tutorial 35: Depth Buffer Tutorial 36: Blur Tutorial 37: Coming Soon... DirectX 10 Terrain Tutorials: Tutorial 1: Grid and Camera Movement Tutorial 2: Height Maps Tutorial 3: Terrain Lighting Tutorial 4: Terrain Texturing Tutorial 5: Color Mapped Terrain Tutorial 6: Quad Trees Tutorial 7: Coming Soon... 。。。。。。。。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值