本章主要说的是反射和透射,不过还是以反射为主要内容。
REFLECTION MODELS
对于surface的反射属性数据,一般有这样几类的获取方式:
- 测出来的,比如bungie会有仪器测模型的brdf值
- 推算出来的
surface的反射可以分成这样几种:
- diffuse:漫反射
- glossy specular:specular是镜面反射的意思
- perfect specular
- retro-reflective:主要是顺着入射光反射的一种类型
BXDF:
中间的x可以有几种:
- 说反射的,就是reflection,就是brdf
- 说散射的,就是scattering,就是bsdf
- 投射的,就是transmission,就是btdf
SpecularReflection and Transmission
首先介绍了简单的反射和折射定律:
- 反射是入射角==反射角
- 折射是snell定律:refraction_index_incident*sin(incident_angle)==refraction_index_transmit*sin(transmit);
fresnel reflection
这里和我们学的物理是一样的,就是光的反射和投射的比率。
这个取决于,光反射surface两边介质的refract index,以及入射角,
对于不透明介质,一部分光能量会被吸收,还要多一个吸收系数(absorption coefficient)
然后是很多公式,直接看wikipedia吧:
http://en.wikipedia.org/wiki/Fresnel_equations
而谈fresnel reflection的意义就是在非perfect reflection的时候,就要考虑这一项fresnel。
Lambertian Reflection
这个是描述纯diffuse surface的模型,现实中不存在这种模型,它只有一个散射常数,其实也就是我们常说的diffuse color。
MicroFacetModel
这个在之前的gamedev界常说的physically based rendering中说了很多次了(比如本blog的这个:http://blog.csdn.net/ccanan/article/details/6757592),就不赘述:
值得一提的是isotropic model和anisotropic model,各向异性的surface比如丝绸类,它是有两个specular power,做出来类似椭圆的定义。
公式也是大同小异:
fresnel用schlick approximation:
R+(1-R)*pow(1-cos(theta),5)