学习光照的一些参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习光照的一些参数相关的知识,希望对你有一定的参考价值。

light intensity  光强度(发光强度的单位。代号cd。是一光源在给定方向上的发光强度)技术分享

glossiness 光泽度 (用数字表示的物体表面接近镜面的程度,它主要取决于光源照明和观察的角度 ,一般指加工品的表面色泽,磨损,损坏会影响光泽度)

specular 高光  (高光是指图像中色调较亮的像素,高光色调最大的色阶值是255)

ambient 环境光 (整个环境的默认灯光)

direction light 方向光(平行光,定向灯)  光源拥有不变方向的平行光线且不会随着距离衰减(一般用于太阳光)

point light 点光(点灯) 像所有方向发射光,非线性衰减

spot light 聚光灯(射灯)   一种锥形光源,相当于点光给了一个罩子,隔得越远非线性衰减

area light 区域光(一个区域内的环境光)

漫反射强度=材质的漫反射系数×光源强度×(法线方向向量·入射光方向向量)
例如:0.5(反射一半)×1(最强,白色)×cos0(入射光垂直于法线,夹角0)=0.5(半减,灰色)
*所有的“强度”“系数”都是和“颜色”是等价的,因为将RGB三个分量计算过后,合并的结果就是颜色而不再是强度了。
即“漫反射颜色=材质的漫反射颜色×光源颜色×(法线方向向量·入射光方向向量)”(下同)
*注意,“×”是数乘,而“·”则是点乘,也就是说最后两向量的点积表示的就是它们夹角的cos值。(下同)
*注意,所有向量都是单位向量,并且入射光向量由反射点指向平面外。(下同)

技术分享

*图示,L是入射光,N是法线,R是反射光,eye是视点
 
2、镜面反射
理想镜面是不存在的,对一般的光滑表面而言,反射光会集中在一个范围内,它的结果与视点有关,即:
镜面反射强度=材质镜面反射系数×光源强度×(法线方向向量·入射光与视点夹角一半的方向向量)^光泽度
例如:0.5(反射一半)×1(最强,白色)×cos0(视点位于反射光方向上,夹角0)^1(加权1)=0.5(半减,灰色)
*“^光泽度”是“光泽度次方”,光泽度越大,高光的亮斑越小
*标准算法应该是指向视点的光线和反射线的单位向量的点乘(即上图中的α角),但为了节省计算,我们按blin模型用此代替。
*那个半向量=视点方向向量+入射光方向向量,如果按下图的箭头,那么就是视点方向向量-入射光方向向量
技术分享
*图示,H为半向量,它与eye的夹角等于它与L的夹角,这个角只是近似(你可以很容易的发现,其实它少了一半),但对于实时渲染而言,这已经足够了。

3、环境反射
环境光是一种经过多次反射平衡的光,它的强度是均匀的,并且分布是一样的,即:
环境光没有位置或方向上的特征,只有一个颜色亮度值,而且不会衰减,所以在所有方向和所有物体表面上投射的环境光的数量是恒定不变的。
 
因此,在局部光照明模型中(全局光照明包含对象间的作用,需要光线追踪等算法。为了效率,实时渲染中可以忽略),我们用一个常量进行计算:
环境反射强度=材质环境反射系数×环境光强度
例如:0.5(反射一半)×1(最强,白色)=0.5(半减,灰色)

以上是关于学习光照的一些参数的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 光照效果

光照模型

ShaderLab学习小结简单的支持光照贴图的shader

一些着色器代码中的环境光照

顶点着色器 学习笔记

Unity 中的基础光照