4种基本光照模型

露夕逝 露夕逝     2022-08-22     189

关键词:

1.Lambert模型(漫反射)

环境光:

Iambdiff = Kd*Ia

其中Ia 表示环境光强度,Kd(0<K<1)为材质对环境光的反射系数,Iambdiff是漫反射体与环境光交互反射的光强。

方向光:

Ildiff = Kd * Il * Cos(θ)

其中Il是点光源强度,θ是入射光方向与顶点法线的夹角,称入射角(0<=A<=90°),Ildiff是漫反射体与方向光交互反射的光强,若 N为顶点单位法向量,L表示从顶点指向光源的单位向量(注意顶点指向光源),则Cos(θ)等价于dot(N,L),故又有:

Ildiff = Kd * Il * dot(N,L)

最后综合环境光和方向光源,Lambert光照模型可以写成:

Idiff = Iambdiff + Ildiff = Kd * Ia + Kd * Il * dot(N,L)

 

 

2.Phong模型(镜面反射)

Phong模型认为镜面反射的光强与反射光线和视线的夹角相关:

Ispec = Ks * Il * ( dot(V,R) )^Ns

其中Ks 为镜面反射系数,Ns是高光指数,V表示从顶点到视点的观察方向,R代表反射光方向。由于反射光的方向R可以通过入射光方向L(从顶点指向光源)和物体的法向量求出,
R + L = 2 * dot(N, L) * N  即 R = 2 * dot(N,L) * N - L

所以最终的计算式为:

Ispec = Ks * Il * ( dot(V, (2 * dot(N,L) * N – L ) )^Ns

 

 

3.Blinn-Phong光照模型(修正镜面光)

Blinn-Phong是一个基于Phong模型修正的模型,其公式为:

Ispec = Ks * Il * ( dot(N,H) )^Ns

其中N是入射点的单位法向量,H是光入射方向L和视点方向V的中间向量,通常也称之为半角向量(半角向量被广泛用于各类光照模型,原因不但在于半角向量蕴含的信息价值,也在于半角向量是很简单的计算:H = (L + V) / |L + V|  )。

 

 

4.Rendering Equation(全局光照模型)

Rendering Equation 是Kajia在1986年提出的,

Lo(X, Wo) = Le(X, Wo) + ∫fr(X, Wi, Wo) Li(X, Wi) dot(N, Wi) dWi

其中X表示入射点,Lo(X, Wo)即从物体表面X点,沿方向Wo反射的光强,Le(X, Wo)表示从物体表面X以方向Wo 发射出去的光强,该值仅对自发光体有效,fr(X, Wi, Wo)为,入射光线方向为Wi, 照射到点X上,然后从Wo方向发射出去的BRDF值,Li(X, Wi)为入射方向为Wi照射到点X上的入射光强,N表示点X处的法向量,然后对入射方向进行积分(因为光线入射的方向是四面八方的,积分的意义是对每个方向进行一遍计算后相加),计算的结果就是全局光照的辐射率。

对于单个点光源照射到不会自发光的物体上,公式可以简化成:

Lo(X, Wo) = fr(X, Wi, Wo) Li(X, Wi) dot(N, Wi)

这个公式非常有用,通常会将该公式分解为漫反射表达式和镜面表达式之和。对于漫反射表面,BRDF可以忽略不计,因为它总是返回某个恒定值,所以可以写成如下形式:

Lo(X, Wo) = Idiff + frs(X, Wi, Wo) Li(X, Wi) dot(N, Wi)

其中Idiff表示漫反射分量,使用公式的计算方法,frs(X, Wi, Wo)表示镜面反射的BRDF函数,前面的Phong高光模型,其实是rendering equation在单一光源下针对理想镜面反射的特定推导,对于Phong高光而言:

frs(X, Wi, Wo) = Ks (dot(N, H)^Ns  / dot(N, Wi)

 

//-------------------------------------------------------------------------------------------------------------------------

 

几种光照模型的比较

Lambert 模型能够较好地表现粗糙表面上的光照现象,如石灰墙,纸张等等,但是在渲染金属材质制成的物体时,则会显得呆板,表现不出光泽,主要原因是其没有考虑到镜面反射效果,所以Phong模型对其进行了很好的补充。由于Blinn-phng光照模型混合了Lambert的漫射部分和标准的高光,渲染效果有时会比 Phong高光更柔和,有些人认为phong光照模型比blinn-phong更加真实,实际上也是如此,Blinn-phong渲染效果要更加柔和一些,但是由于Blinn-phong的光照模型省去了计算反射光线方向向量的两个乘法运算,速度更快,因此成为许多CG软件中默认的光找渲染方法,此外它也继承在了大多数图形芯片中,用以产生实时的快速渲染。在OpenGL和Direct3D渲染管线中,Blinn-Phong就是默认的渲染模型。 Rendering Equation是基于物理光学的模型,其对于观察方向上的辐射率进行了本质上的量化,Phong模型只是其特定BRDF的推导。

以下给出Blinn-Phong的CG片段,用于参考实现:

struct VertexScreen
{
    float4 oPosition : POSITION;
    float4 objectPos : TEXCOORD0;
    float4 objectNormal : TEXCOORD1;
};

void main_f(VertexScreen posIn,
    out float4 color : COLOR,
    uniform float4x4 worldMatrix,
    uniform float4x4 worldMatrix_IT,
    uniform float3 globalAmbient,
    uniform float3 eyePosition,
    uniform float3 lightPosition,
    uniform float3 lightColor,
    uniform float3 Kd,
    uniform float3 Ks,
    uniform float shininess)
{
    float3 worldPos = mul(worldMatrix, posIn.objectPos).xyz;
    float3 N = mul(worldMatrix_IT, posIn.objectNormal).xyz;
    N = normalize(N);

    //计算入射光方向视线方向半角向量
    float3 L = normalize(lightPosition - worldPos);
    float3 V = normalize(eyePosition - worldPos);
    float3 H = normalize(L + V);

    // 计算漫反射分量
    float3 diffuseColor = Kd * globalAmbient+Kd*lightColor*max(dot(N, L), 0);
 
    //计算镜面反射分量
    float3 specularColor = Ks * lightColor*pow(max(dot(N, H), 0), shininess);
    color.xyz = diffuseColor + specularColor;
    color.w = 1;
}

 

原文链接:http://blog.csdn.net/ym19860303/article/details/25545933

光照模型概念

  三维场景包含三个基本的对象,物体、光照、观察者。  光照模型分为局部光照模型和全局光照模型。  局部光照模型仅考虑光源直接照射到物体表面上所产生的效果。  全局光照模型考虑物体之间的间接反射,能... 查看详情

最简单光照模型中的光照方向及其变换

...问题描述】:所以,我已经在我的OpenGL学习任务中了解了基本照明。想象一下这个最简单的照明模型。每个顶点都有一个位置、颜色和法线。着色器获取模型视图投影矩阵(MVP)、模型视图矩阵(MV)和法线矩阵(N),计算为(... 查看详情

opengles之基础光照模型的实现(代码片段)

一、OpenGLES基础光照模型OpenGLES目前还无法模拟现实世界的复杂光照效果,为了在效果要求和实现难度之间做一个平衡,往往采用一些简化的模型来模拟光照效果。冯氏光照模型(PhongLightingModel)便是其中常用的一个光照模型,... 查看详情

光照模型

要模拟真实的光照环境来生成一张图像,需要考虑三种物理现象:  1、光线从光源中被发射出来  2、光线和场景中的一些物体相交:一些光线被物体吸收了,而另一些光线被散射到其他方向  3、摄像机吸收了一些光,产... 查看详情

建模复盘:光照强度计算的优化模型(代码片段)

...放4个光源(分别为1、2、3、4),各个光源的光照强度均为一个单位,如下图要求:(1)如何计算教室内任意一点的光照强度?(光源对目标点的光照强度与该光源到目标点距离 查看详情

lambert光照模型

lambert光照模型只考虑环境光和漫反射光的影响。因此在计算的时候,你只需要知道光源的位置和物体上受光点法线的方向即可,而无需知道视点在哪里。650)this.width=650;"src="http://s3.51cto.com/wyfs02/M02/86/E0/wKioL1fN-u_SS7xUAAEfk8H9684951.png-w... 查看详情

opengl教程学习笔记(代码片段)

...到屏幕图像的过程1.6着色器(Shader):处理数据的程序2基本内容2.1顶点输入2.2顶点着色器(VertexShader)2.3片段着色器(FragmentShader)2.4着色器程序(Program)2.5纹理3坐标变换3.1矩阵运算3.1.1向量相乘点乘叉乘3.1.2矩阵3.2坐标运算3.2.1局部空... 查看详情

unityshaders学习笔记之为创建halflambert光照模型(代码片段)

 一、创建HalfLambert光照模型  HalfLambert(半兰伯特)是由Value公式提出的技术,是一种用于在低光照区域照亮物体的技术。它基于提高了材质和物体表面周围的漫反射光照。  二、如何操作  我们继续使用上一节的代码【UnityS... 查看详情

opengl4种光照模型

...有:Ildiff=Kd*Il*dot(N,L)最后综合环境光和方向光源,Lambert光照模型可以写成:Idiff=Iambdiff+Ildiff=Kd*Ia+Kd*Il*dot(N,L)  2.Phong模型(镜面反射)Phong模型认为镜面反射的光强与反射光线和视线的夹角相关:Ispec=Ks*Il*(dot(V,R))^Ns其中Ks为镜... 查看详情

unityshader学习之半兰伯特光照模型

半兰伯特光照模型,为Valve公司在开发游戏《半条命》时提出的一种技术,用于解决漫反射光无法到达区域无任凭明暗变化,丢失模型细节表现的问题。其公式如下:  Cdiffuse=Clight*mdiffuse*(dot(n,l)*0.5+0.5)通过这样的方式,将dot(n,... 查看详情

深度学习5-4-9模型

...络模型编译模型训练模型评估模型使用模型进行预测4种基本元素:网络结构:由9种基本层结构和其他层结构组成激活函数:如relu,softmax。口诀:最后输出用softmax,其余基本都用relu损失函数:categorical_crossentropy多分类对数损失,b... 查看详情

directx11第九篇光照模型——高光

...章。本文索引:关于灯光SpecularHighlights高光1Phong冯氏光照模型2PhongPreamble冯氏光照模型变量准备3PhongVertexShader冯氏模型顶点着色器4PhongPixelShader冯氏模型像素着色器5PhongOutput冯氏光照模型效果输出6Blinn-Phong改进的冯氏光照模型... 查看详情

phong和blinn-phong光照模型(代码片段)

...bluebean/p/5299358.htmlPhong和Blinn-Phong是计算镜面反射光的两种光照模型,两者仅仅有很小的不同之处。 1.Phong模型Phone模型计算中的一个关键步骤就是反射向量R的计算: 上图中的位于表面“下面”的向量 ‘I’ 是原始&... 查看详情

学unityshader之前学unity吗

...面着色器模板2.Unlitshader:不包含光照(但包含雾效)的基本的顶点/片元着色器3.Imageeffectshader:为我们实现各种屏幕后处理效果提供了一个基础模版4.CompareShader:产生一种特殊的shader文件,利用GPU的并行性来进行一些与常规渲染... 查看详情

游戏引擎中的光照算法

...这个是最传统的方法,对于多光源的处理比较有限,它的基本算法如下所示:一般游戏引擎为了减少批次和处理光照的次数,会让每个物体受影响的光源有个上限比如3个或者4个,而且一般是在一个shader里面直接处理多个光源的... 查看详情

光照模型

光照模型(illuminationmodel),也称为明暗模型,用于计算物体某点处的光强(颜色值)。从算法理论基础而言,光照模型分为两类:一种是基于物理理论的,另一种是基于经验模型的。基于物理理论的光照模型,偏重于使用物理... 查看详情

数学建模比赛论文的基本结构

一、常用的三种结构一二三1.摘要1.摘要1.摘要2.问题重述2.问题的提出与重述、问题的分析2.问题的叙述、背景的分析3.问题的分析3.变量假设3.模型的假设、符号说明4.模型假设4.模型建立4.模型建立5.符号说明5.模型求解5.模型求解... 查看详情

✠opengl-7-光照(代码片段)

目录光照模型光源材质ADS光照计算公式汇总实现ADS光照Phong反射模型自转与绕轴旋转(mMat*rMat!=rMat*mMat)法向量变换用到『逆转置矩阵』Blinn-Phong反射模型结合光照与纹理补充说明光照模型最常见的光照模型称为“ADS”模型:... 查看详情