1、从宏观上说,渲染包含了lian两大部分:决定一个像素的可见性,决定这个像素上的光照计算
辐照度:照射到物体表面之间的光线距离
光线由光源发射出来后,就会与一些物体相交。通常,相交的结果有两个:散射和吸收
散射有两种方向,一种将会散射到物体内部内部,称为折射或投射;一种散射到外部,称为反射
2、为了区分两种不同的散射方向,在光照模型中使用了不同的部分来计算它们:
高光反射部分表示物体表面是如何反射光线的;
漫反射部分表示有多少光线会被折射、吸收和散射出表面
使用出射度来描述出射光线的数量和方向
辐照度和出射度之间满足线性关系,它们之间的比值就是材质的漫反射和高光反射属性
3、着色
根据材质属性、光源信息,使用一个等式去计算沿某个观察方向的出射度的过程。该等式也称为光照模型
BRDF光照模型
4、标准光照模型
基本方法是,将进入摄像机内的光线分为4个部分,每个部分用一种方法来计算它的贡献度:
#自发光
#高光反射
#漫反射
#环境光
5、计算光照模型,通常有两种选择,在片元着色器中计算,称为逐像素光照;在顶点着色器中计算,称为逐顶点光照
标准光照模型仅仅是一个经验模型,并不完全符合真实世界中的光照现象。但由于它的易用性、计算速度和得到的效果都比较好,因此仍然被广泛使用。也被称为Phong光照模型,而后Blinn的方法简化了计算,又称为Blinn-Phong光照模型。
局限性:菲涅尔反射、各项同性
6、Unity中的环境光和自发光
在Unity中,场景中的环境光可以在Window > Lighting > Ambient Source/Ambient Color/Ambient Intensity中控制
我们只需要通过Unity的内置变量UNITY_LIGHTMODEL_AMBIENT就可以得到环境光的颜色和强度xin信息
计算自发光,只需要在片元着色器输出最后的颜色之前,把材质的自发光颜色tian添加到输出颜色即可
7、Unity中实现man漫反射光照模型
基本光照模型中漫反射部分的计算公式:
Cdiffuse=(Clight · Mdoffuse) max(0,n · l)
4个参数:入射光线的颜色和强度Clight,材质的漫反射系数Mdiffuse,表面法线n以及光源方向l
逐顶点漫反射光照、逐像素漫反射光照
半兰伯特光照模型:
Cdiffuse=(Clight · Mdoffuse)(α(n · l)+β),绝大多数情况下取0.5
8、在Unity Shader中实现高光反射光照类型
基本光照模型中高光反射部分计算公式:
Cspecular=(Clight· Mspecilar)max(0,v·r)^Mglass
4个参数:入射光线的颜色和强度Clight,材质的高光反射系数Mspecilar,视角方向vyi'j以及反射方向r
其中,反射方向r可以由表面fa'x法线n和光源方向l计算而得:
r=2(n·l)n-l
Blinn-Phong光照模型:
h=(v+l)/|v+l|
Cspecular=(Clight· Mspecilar)max(0,n·h)^Mglass