传统经验光照模型

局部光照模型

局部光照模型只关心直接光照部分,即直接从光源发出并照射到物体表面并反射至摄像头的光线。

  • 漫反射:Lambert余弦定律,材质偏向橡胶

反射光线的强度与表面法线和光源方向之间的夹角的余弦成正比

        color = Cight  * albedo * dot(normal,L );
 

  • 镜面反射

{\color{Blue} C_{specular} = C_{light} * m_{specular} * dot(v,r)^{m_{gloss}}}

r=I-2 * dot(n,l) * n

其中mgloss表示了材质的光泽度;mspecular表示了材质的反射光;R表示反射光线;V表示视线向量

光泽度越大,高光越小

  • 环境光

{\color{Blue} C_{ambient} = Albedo * Ambient_{light}}

通常使用漫反射的反照率来指示环境光照的反射光量,该模型假定场景中发生多次散射和反射,并在所有方向上均等的射向目标物体
 

  • Lambert模型:

         color = Cight  * albedo * dot(normal,L );

  • Phone模型:环境光+漫反射+高光反射

{\color{Blue} C_{final} = A_{light} * m_{diffuse} + C_{light} * (m_{diffuse} * dot(l,n) + m_{specular} * dot(v,r)^{gloss})}

Atight 环境光量
Cight入射光量
mdiffuse漫反射率
mspecular镜面反射率
l指向光源入射光向量
n物体表面法线
r反射向量
gloss光泽度控制高光反射区域

  • Blinn-Phone模型:Blinn- Phong模型不再依赖于反射向量,而是采用了所谓的半程向量(Halfway Vector),即光线与视线夹角一半方向上的一个单位向量。当半程向量与法线向量越接近时,镜面光分量就越大【比Phone模型的高光范围更大】

{\color{Blue} C_{final} = A_{light} * m_{diffuse} + C_{light} * (m_{diffuse} * dot(l,n) + m_{specular} * dot(h,n)^{gloss})}

  • Phone模型与Blinn-Phone模型的区别:

半角向量的使用带来了什么变化?

  1. 计算更加简洁,半角向量比反射向量的计算更加简洁
  2. 当光源与视线都在物体表面之上时,半角向量与法线的角度永远不大于90度

        设想种情况,当材质的反光度非常低,因此物体的被光线照射的大部分区域都会发生高光反射。这些区域中一部分高光部分的反射向量与视线的夹角超过了90度。如果使用Phone模型就会导致高光区域一部分发生缺失。这是由于phone模型只考虑视线与光照分布在法线两侧的情况。当视线与光照在法线同侧时且高光反射对亮度有较大影响时,就会发生断层。

  •  Gourand模型:Gourand模型是以顶点为单位计算光量在通过插值得到每个像素点的光亮度。

在表现物体光滑性上有比较好的表现,但值不再是线性变化的时候,比如镜面高光,由于线性插
值导致内插值不可能大于顶点值。因此高光只能出现在顶点。由于使用的颜色插值,会导致镜面高光蔓延到周边

  • Flat模型:平面着色模型,计算多边形的单个强度,每个三角形只有一个法线方向。以相同的光强度值显示多边形的所有点。通常适用于lowPoly风格的场景

总结

Lambert模型只考虑表面的漫反射部分
Phong模型能够较好的呈现镜面高光的效果,也是四种模型中最接近真实的效果,需要计算较复杂的反射向量
Blinn-Phong模型效果与Phong模型相近,更偏向艺术性的效果,使用方便计算的半程向量代替较为复杂的反射向量,计算量小于Phong,是效果和效率的最佳选择,也是大多数情况下的默认光照模型
Gourand模型计算顶点光照并通过增量法插值计算多边形内部的光强,当顶点密度低时,表现效果很差,对于高光的效果也不尽如意,计算量较小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值