3D数学 学习笔记(8)光照
学习图形学的时候,光照知识也是必须要掌握的,想要在Unity游戏开发中实现光照,就要去模拟物体的反射光,让物体有明暗关系。下面就来看看光照的介绍吧。
⊗符号代表两个色彩“按位乘”。
Clit = Cspec + Cdiff + Camb + Cemis
- Clit:打开光照情况下计算颜色值的结果。
- Cspec:镜面反射分量。
- Cdiff:漫反射分量。
- Camb:环境光分量。
- Cemis:自发光分量。
需要考虑的因素:
- 材质属性。
- 表明法向量方向。
- 光源性质。
- 观察者位置。
Cemis = memis
光照颜色值等于自身材质颜色值。
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 的中间向量(类似对称轴)。
是随机的反射光,不依赖于视点位置。光源位置是主要因素。镜面反射是物体表面完全光滑下的反射,而漫反射是物体表面粗糙造成的。
假设光之间距离相同,且表面有限,垂直射入的光线就会比斜着进入的光线多。
Lambert法则
- mdiff:材料的散射色。
- sdiff:光源的散射色,一般等同于光源镜面色sspec。
- n · l:法向量与光源夹角的余弦值,即角度越大,值越小。
不涉及任何光源。
- mamb:材质的环境光,总是等于漫反射分量:纹理图。
- gamb:整个环境光值。
- 所有光源结合即可,环境光和自发光只有一个。
在计算顶点光照时,因为mdiff不是顶点级材质属性,可以假设mamb等于mdiff。
flat着色
逐多边形计算。一个三角形只计算一次,去三角形的中心。
Gourand着色
逐顶点插值计算。先通过顶点计算光照,再用于三角形面插值。
Phong着色
逐像素计算。
- 点光源(全向光、球状光,Point Light)。
- 平行光(Directional Light、Parallel Light),没有位置和衰减。
- 聚光灯(Spot Light),有高光区还有衰减区。常见圆锥形(手电筒)和四椎体形(电影放映)。
现实世界中,光的强度反比于物体和光源距离的平方。
常用一个简单线性方程来计算衰减:dmin内,光强不衰减,dmin到dmax内,光强从1减到0,超出dmax则光强为0。
给定入射光线方向和辐照度后,可以得到出射方向的光照分布。如果是对场景理想化和简化后的模型,称为经验模型。