Real-time rendering(5) 光照模型之真实感渲染的不可或缺

光照就是人眼对光强度的反应,基于光强度,光又分为漫射光和镜面光(高光)。下面重点讲解phong光照模型。

研究光照模型的核心就是研究光照怎样作用到片元的颜色上去的。



1,phong光照模型的原理

通过对比该效果可以看出光照对于真是渲染的重要性,我们认为反射光的光强是环境光, 漫射光和反射光(高光)3者的叠加,即我们是通过光照效果来实现真实感的渲染的。

由于环境光的光强度是相同的,所以一个物体在环境光的照射下其明暗程度是相同的,即仅仅靠环境光我们是无法实现真实感渲染的。首先从入射光的学习开始。

入射光的反射主要有2中形式:漫射光和镜面反射光。

其中漫射光的光强仅与入射光的方向和反射点处表面法向夹角的余弦成正比,由此可以构造出Lambert漫反射模型:

  • Idiffuse =Id Kd cosθ
    Idiffuse表示物体表面某点的漫反射光强
    Id为点光源,Kd(0<Kd<1)表示物体表面该点对漫反射光的反射属性。
由于自然界中存在着一些物体表面如金属,银镜等。仅仅利用上述光照模型是无法反应这些物体的表面特征的。因此就有了镜面反射模型。在镜面反射模型中,最常用也是最有效的模型是phong光照模型,,认为镜面反射的强度与反射光线和视线的夹角α相关。但是要注意phong光照模型和phong明暗处理是2个不相同的概念。
2, phong光照模型的代码实现
在opengl中基于phong光照模型做了3中实现,这3中实现分别对应3中光源类型。
方向光,最简单的光源类型
void main()
{
float diffuse = max(0.0, dot(Normal, LightDirection));
float specular = max(0.0, dot(Normal, HalfVector));
if (diffuse == 0.0)
specular = 0.0;
else
specular = pow(specular, Shininess); // sharpen the highlight
vec3 scatteredLight = Ambient + LightColor * diffuse;
vec3 reflectedLight = LightColor * specular * Strength;
}
那么为什么是这样来计算反射光和漫射光的呢?

3,mesh渲染定点法向量的求取方法

4,体渲染法向量的求取方法
参考:
http://cg.sjtu.edu.cn/lecture_site/chap1/main.htm
计算机图形学

http://http.developer.nvidia.com/CgTutorial/cg_tutorial_chapter05.html

你可能感兴趣的:(Real-time rendering(5) 光照模型之真实感渲染的不可或缺)