(总结整合几篇 blog 和一些国外图书的内容)
常见的反射类型分为:Lambertian 反射、理想镜面反射、Lambertian 反射与镜面反射相结合
Lambertian 表面是指在一个固定的照明分布下从所有的视场方向上观测都具有相同亮度的表面,Lambertian 表面不吸收任何入射光.Lambertian 反射也叫散光反射,不管照明分布如何,Lambertian 表面在所有的表面方向上接收并发散所有的入射照明,结果是每一个方向上都能看到相同数量的能量.
维基百科的解释:http://en.wikipedia.org/wiki/Lambertian
在计算机图像学中,Phong 光照模型:http://www.cnblogs.com/dosomething/archive/2011/10/20/2218369.html
SurfaceColor = Emissive + Ambient + Diffuse + Specular
最终表面 = 放射光 + 环境光 + 漫反射 + 镜面反射
放射光:
Emissive = Ke
Ke 为材质放射的颜色
环境光:
Ambient = Ka * GlobalAmbient
Ka 为材质环境光反射系数;GlobalAmbient 为全局环境光的颜色
漫反射:
Diffuse = Kd * LightColor * max(dot(N, L), 0)
Kd 为材质漫反射颜色;LightColor 为漫反射光的颜色;N 是规范化后的表面法向量;L 是规范化后的指向光源的向量;
max(x, y) 函数返回 x 和 y 的最大值;dot(x, y) 函数返回 x 向量和 y 向量的内积
镜面反射:
Specular = Ks * LightColor * pow(max(dot(N, H), 0), fShinines )
Ks 是材质镜面反射的颜色;LightColor 是镜面反射光的颜色;N 是规范化后的表面法向量;H 是规范化后的 L 和 V 的中间向量(即规范化后的 L+V),其中 V 是规范化后的指向视点的向量
pow(x, y) 函数返回 x 的 y 次方;
这里 dot(N, L) 如果小于等于 0,即 Diffuse 为 0,则 Specular 为 0。确保了镜面反射的高光不会出现在背向灯光的地方
联系客服