File failed to load: https://cdnjs.loli.net/ajax/libs/mathjax/2.7.9/jax/element/mml/optable/BasicLatin.js

基于物理的渲染(PBR)

在前面介绍了BDRF函数,那么具体这个函数是什么样子的我们并不知道。接下来简单介绍常用的BRDF函数。

Phong BRDF

在学习PBR之前,我们最常用的是Phong光照模型,为了使得Phong具有物理意义,定义Phong BRDF:

fr(p,ωi,ωo)=kd1π+ksn+22πmax(0,cosα)n
  • α是光线出射方向与入射光线理想镜面反射方向之间的夹角;
  • kd是漫反射率(diffuse reflectivity),即投射到物体表面的能量中发生漫反射的比例;
  • ks是镜面反射率(specular reflectivity),即垂直投射到物体表面的能量中被镜面反射的比例;
  • n是镜面指数(specular exponent),更高的值会产生更清晰的镜面反射;
  • 为了满足能量守恒,限制kd+ks1

Untitled

Untitled

Read more

深度重建世界坐标

熟悉MVP流程

MVP变换中,一般是这样得到裁剪坐标:

clipPos=PVM×localPos

之后,经过透视除法,得到NDC坐标:

NDCPos=clipPos.xyz/clipPos.w

深度重建世界坐标

正常的MVP变换中,一般由如下操作获得裁剪坐标:

clipPos=PV×worldPos

然后进行透视除法获得NDC坐标:

NDCPos=clipPos.xyz/clipPos.w

现在我们需要将NDC坐标逆推回世界坐标,容易知道:

worldPos=(PV)1×clipPosclipPos.xyz=NDCPos×clipPos.w

构造一个新的clipPos:

clipPos=(clipPos.xyz,clipPos.w)=(NDCPos×clipPos.w,clipPos.w)=clipPos.w(NDCPos,1)

带入回去,得到:

worldPos=(PV)1×clipPos.w×(NDCPos,1)

但注意到worldPos.w=1,于是:

clipPos.w=worldPos.w((PV)1×(NDCPos,1)).w=1((PV)1×(NDCPos,1)).w

所以可以间接求出clipPos.w

代入原式,得到:

worldPos=(PV)1×(NDCPos,1)((PV)1×(NDCPos,1)).w

因此我们不需要clipPos.w也是可以得到世界坐标的,因为((PV)1×(NDCPos,1)).w其实就是worldPos.w,所以只要算出(PV)1×(NDCPos,1),然后除以自身即可!

代码如下:

1
2
3
4
float depth = texture(depthTex, texcoord);
vec4 ndcPos = vec4(2 * texcoord, 2 * depth - 1, 1.0f);
vec4 worldPos = InverseVP * ndcPos;
worldPos.xyz /= worldPos.w
Read more

辐射度量学与光线追踪原理

辐射度量学

背景

Phong和Blinn-Phong的经验模型过于经验,没有严谨的物理定义,所以计算机图形学急需要一个能够符合物理基本规律的光照知识,这就是辐射度量学提出的背景(基于物理光学)。

概念

  1. 辐射能Q,单位是焦耳,是能量,表示穿过一个曲面(类似于电磁学的高斯面)的光能。
  2. 辐射通量ϕ,表示单位时间内穿过曲面的光能(注意是单位时间,辐射通量等价于功率)

    ϕ=dQdt
  3. 立体角ω(针对球面坐标系),类比于平面角(针对极坐标系):

    θ=lr

    可以得到立体角的公式:

    ω=Ar2

    Untitled

    Untitled

Read more

投影矩阵的具体推导

正交投影

正交投影的步骤是先平移到世界原点,然后进行缩放,把视界体缩放成长度为2的正方体,取值为[1,1]3:

Untitled

Untitled

左极端点为(left,bottom,near),右极端点为(right,top,far)

用矩阵变换描述上述过程:

Mortho=ST

其中,平移的时候,应当让视见体的中心(right+left2,top+bottom2,near+far2)移动到世界原点,于是平移矩阵如下:

T=[100l+r2010t+b2001n+f20001]
Read more
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×