写个读书笔记,一来作为字典以后可以查,二来记录自己的理解。
并没有对每个知识点的详细解释,大部分只有主观的定性的解释。
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(能量守恒)
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还有后续处理的话,就不一定简单了。