计算机图形学 读书笔记(二) BRDF双向反射分布函数

写个读书笔记,一来作为字典以后可以查,二来记录自己的理解。

并没有对每个知识点的详细解释,大部分只有主观的定性的解释。


BRDF双向反射分布函数 意义并不复杂,但是函数表达式却需要时间去理解。


BRDF的意义

 描述反射光与入射光的关系。  那么 已知多个光源,如何求得指定观测点 观测 指定 被观测点 的光强呢? 

定性描述一下: 反射光强= 入射光强 * 一个系数。   这个系数就是BRDF。

以上 光强 这个词只是方便理解,并不是实际物理定义的光强。 光强的定义由很多物理量表示。


BRDF的公式

 ,     v代表反射方向,l代表入射方向。 也就是说根据入射求反射。 具体微分,L, E的意义后续解释。


BRDF的分类

根据BRDF的建模方式,有一下几种分类:

Empirical Models (经验模型)   如:最直白的用 常数反射率Albedo,l,v 和法线n表示关系如下:

经验模型放弃了光物理应遵循的一些性质,来达到简化的效果。这个公式就不遵循光路可逆性。


Physical-based Models (基于物理的模型) : 将常数反射率展开, 考虑microface啊 ,其他的物理性质因素,得到的模型。

Data-driven Models (数据表达的模型) :     直接测量实际的反射率,以一个庞大的数据库存储起来。



理解实际BRDF需要的物理知识

(从派大星PatrickStar的博客copy的):

所以 :可以理解为,分布函数  等于 特定入射光的辐射率 除以 特定反射方向(一般为观察方向)的照度  。


其他提到的重要概念:

  • 微表面,漫反射:  漫反射使我们看到物体。
  • 高光
  • Isotropic (各向同性Anisotropic(各向异性) 
  • BRDF应具有的性质:reciprocity(可逆性) energy conservation(能量守恒)
unity里的应用
inline float4 LightingCustomDiffuse (SurfaceOutput s, fixed3 lightDir, fixed atten) {  
    float difLight = max(0, dot (s.Normal, lightDir));
    float4 col;
    col.rgb = s.Albedo * _LightColor0.rgb * (difLight * atten * 2);
    col.a = s.Alpha;
    return col;
}

这是shader里的 漫反射光照模型 的函数,SurfaceOutput s这个是上一步渲染过程中的输出,

fixed3 lightDir是光线的方向,fixed atten表示光衰减的系数。

可以看出在col.rgb作为最后的输出,是直接由 光的颜色 * 入射光与法线点积* 一个衰减* 面的颜色 得到的。 好简单。。。。

以上是我的猜测,如果在渲染过程中 对col还有后续处理的话,就不一定简单了。






猜你喜欢

转载自blog.csdn.net/qq_30795577/article/details/79869711