第三章 phong着色.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Phong光照模型的简单说明我简单地介绍一下Phong光照模型...虽然这种光照模型算是比较古老的,但是通过合适的参数设置,仍然可以实现真实的效果。我们的目标是渲染出以下效果,这里以Doom3的男主角为例(终于不是怪物了...)一般而言,Phong光照模型分为三个累加阶段:漫反射,镜面反射和环境光以下按顺序说明:1.漫反射(Diffuse)对于表面比较粗糙的物体,基本表面的明暗就是漫反射效果,比如裤子的材质。某一个象素的明暗系数只取决于该点与光源的相对位置,而与眼睛的位置无关。diffuse_color = base_map * ( N * V_L )* mat_diffuse * light_diffuse;上式中base_map代表该点的基础颜色,一般通过纹理索引;N 是该点的法线;V_L是该点到光源方向的单位向量;N * V_L 即两者的点积,注意需要用max( ( N * V_L ), 0 ),因为负的值是没有意义的;mat_diffuse和light_diffuse分别是材质和光源的漫反射系数,用来宏观调制漫反射的颜色。下图是只有N * V_L 项的渲染结果:2.镜面反射(Specular)尽管漫反射已经可以很好地表达光照,但是由于它是与视点无关的,所以多少有些欠缺生动,而镜面反射是视点相关的,所以会随着眼睛位置的变化而“流动”。specular_color = pow( v_e * v_l, gloss ) * mat_specular * light_specular;这里解释一下:v_e 是e_v的反射向量(v_e = reflect( e_v, n ) ),而e_v是眼睛到该点的单位向量,所谓反射向量,即以与该点的法线所垂直的平面做镜面反射所得到的向量(虽然按照原理来说,应该是光线反射,而非视线反射...都没有问题吧);v_l是该点到光源的单位向量;v_e * v_l 是两者的点积, 同样要用max(v_e * v_l, 0),负的值也是不需要的;pow是幂积,点积是底,gloss是指数;gloss用来调制亮斑的大小,一般来说,gloss越大,光斑越细小,gloss越小,光斑分布越宽泛。mat_specular,light_specular分别是材质和光源的镜面反射系数,用来宏观调制镜面反射的颜色。注意不是点乘,而是各项分别相乘,就是所谓的调制...下图是只有镜面反射系数的渲染结果:3.环境光(ambient)光照不到的地方是不是就是全黑的呢,对于受空气散射影响比较大的环境来说不是的(比如说室外环境),这里只是简单的对base_map调制了一下:ambient_color = base_map * mat_amvient * light_ambient;4.累加(accumulate)最后就是将他们相加了:result_color = diffuse_color + specular_color + ambient_color;5.其他(1)在以上式中所使用的法线是由各顶点的法线插值得到的,我们可以使用法线贴图来编码各点的实际法线值,以获得更细致的表面:这里是将一个法线的三维向量封装入纹理的RGB分量,另外还涉及一个世界空间到纹理空间的转换,这里不做描述,因为我的实际做法是错误的,却换来正确的结果,所以...我也不清楚啦...(2)使用一张单独的图来编码各点的镜面反射系数,比如有油漆的地方反射较弱,而磨光的地方则反射较强烈(见盔甲部分)(3)以上效果都是利用光照产生的立体错觉,如果失去光照,立体感也将随之消失。对于环境光,我们应该有更好的处理方法,如利用虚拟的光源等等。我在该渲染中使用了两盏灯,产生的效果还不错。(4)说到底,phong模型对金属表面渲染很成功,但对人物表面渲染欠佳,所以才有SSS等等更为先进的模型;但另一方面,Phong模型仍然是最基础和重要的光照模型,当初的固定流水线采用的就是它(当然镜面反射略有不同)先这些吧....接下来让我们看看Phong模型:我们知道,在理想状况下,镜面反射后的光之集中在一条线上,因此我们的视线离这条线的距离越近,射入我们眼中的光线就越多,我们看到的光强也就越强。同时,镜面反射也与物体表面的高光指数(物体表面光泽程度)有关,其数值越大,反射后的光线越集中,反之则越分散,这里可能会有人想:如果将高光指数设置的很大,也就是光线极其分散,Phong是否可以用来代替Lambert?我想答案肯定是不行的,原因是漫反射是将光线反射到各个角度,而镜面反射即使反射光线再分散,它们依旧被限制在一个90度的区域中,因此与漫反射的效果是不一样的。下面给出公式:I_spec = k_z * I_l(V ? R)^n_s?其中:k_z为表面材质的镜面反射系数,n_s是高光指数,V表示顶点到视

文档评论(0)

0520 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档