3D数学 学习笔记(8)光照

发表于2018-01-03
评论0 3.6k浏览

学习图形学的时候,光照知识也是必须要掌握的,想要在Unity游戏开发中实现光照,就要去模拟物体的反射光,让物体有明暗关系。下面就来看看光照的介绍吧。

⊗符号代表两个色彩“按位乘”。

标准光照方程

Clit = Cspec + Cdiff + Camb + Cemis

  • Clit:打开光照情况下计算颜色值的结果。
  • Cspec:镜面反射分量。
  • Cdiff:漫反射分量。
  • Camb:环境光分量。
  • Cemis:自发光分量。

需要考虑的因素: 
- 材质属性。 
- 表明法向量方向。 
- 光源性质。 
- 观察者位置。


自发光(emissive)

Cemis = memis 
光照颜色值等于自身材质颜色值。


镜面反射(高光反射,specular)

Phong模型

所有向量都是单位向量。 
- n:表面法向量。 
- v:指向观察者。 
- l:指向光源。 
- r:l 对 n 镜像的结果,r = 2 ( n · l ) n − l 。 
- θ:r 和 v 的夹角,可以用 r · v 计算得到。

r的计算方法: 

  • mgls:材料的光泽度(gloss),一般是灰度值。控制“光斑”范围,值越小,光斑越大且平滑。下图从下到上,值越来越大。
  • mspec:材料的反射强度。控制“光斑”的强度,值越大,越光滑(越亮)。下图从左到右,值越来越大。
  • sspec:光源的镜面反射颜色。控制光的颜色和强度。

从下到上,mgls越来越大,从左到右mspec越来越大。最左列因为mspec为0,所以对光照不做任何贡献。 

Blinn模型

h(halfway)为 v 和 l 的中间向量(类似对称轴)。 


漫反射(diffuse)

是随机的反射光,不依赖于视点位置。光源位置是主要因素。镜面反射是物体表面完全光滑下的反射,而漫反射是物体表面粗糙造成的。 

假设光之间距离相同,且表面有限,垂直射入的光线就会比斜着进入的光线多。 

Lambert法则

  • mdiff:材料的散射色。
  • sdiff:光源的散射色,一般等同于光源镜面色sspec
  • n · l:法向量与光源夹角的余弦值,即角度越大,值越小。 

环境光(ambient)

不涉及任何光源。 
- mamb:材质的环境光,总是等于漫反射分量:纹理图。 
- gamb:整个环境光值。 


多个光源结合

  • 所有光源结合即可,环境光和自发光只有一个。 

在计算顶点光照时,因为mdiff不是顶点级材质属性,可以假设mamb等于mdiff。 


着色模型

flat着色

逐多边形计算。一个三角形只计算一次,去三角形的中心。 

Gourand着色

逐顶点插值计算。先通过顶点计算光照,再用于三角形面插值。 

Phong着色

逐像素计算。 


光源

  • 点光源(全向光、球状光,Point Light)。
  • 平行光(Directional Light、Parallel Light),没有位置和衰减。
  • 聚光灯(Spot Light),有高光区还有衰减区。常见圆锥形(手电筒)和四椎体形(电影放映)。

光的衰减(Attenuation)

现实世界中,光的强度反比于物体和光源距离的平方。 

常用一个简单线性方程来计算衰减:dmin内,光强不衰减,dmin到dmax内,光强从1减到0,超出dmax则光强为0。 


BRDF光照模型(Bidirectional Reflectance Distribution Function)

  给定入射光线方向和辐照度后,可以得到出射方向的光照分布。如果是对场景理想化和简化后的模型,称为经验模型。

3D数学 学习笔记系列教程:

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引