【Unity Shader入门】Shader基础光照:光照模型

【Unity Shader入门】Shader基础概念:渲染流水线
【Unity Shader入门】Shader编程基础:ShaderLab语法
【Unity Shader入门】Shader数学基础:向量(矢量)
【Unity Shader入门】Shader数学基础:矩阵
【Unity Shader入门】Shader数学基础:矩阵变换
【Unity Shader入门】Shader编程初级:Shader结构
【Unity Shader入门】Shader编程初级:基础光照
[【Unity Shader入门】Shader编程初级:基础纹理]
[【Unity Shader入门】Shader编程初级:透明效果]
[【Unity Shader入门】Shader编程中级:复杂光照]
[【Unity Shader入门】Shader编程中级:高级纹理]
[【Unity Shader入门】Shader编程中级:Shader动画]
[【Unity Shader入门】Shader编程高级:屏幕后处理]
[【Unity Shader入门】Shader编程高级:深度和法线纹理]
[【Unity Shader入门】Shader编程高级:非真实感渲染]
[【Unity Shader入门】Shader编程高级:使用噪声]
[【Unity Shader入门】Shader编程高级:渲染优化技术]
[【Unity Shader入门】Shader编程高级:非真实感渲染]

光照介绍

游戏中摄像机所看到的世界与我们现实中所看到的几乎是一样的。

首先,光线从光源中发射出来。
然后,光线和场景中的一些物体相交(散射,吸收)。
最后,摄像机吸收了一些光,产生一张图像。

光线与物体相交的结果有两个:散射(scattering)和吸收(absorption)

散射:只改变光线的方向,但不改变光线的密度和颜色,有两种方向:内部与外部,对应折射与反射。
折射(refraction):散射到物体内部,用漫反射(diffuse)模型来计算。
反射(reflection):散射的物体外部,用高光反射(specular)模型来计算。
吸收:只改变光线的密度和颜色,但不改变光线的方向。
用不同的光照模型来计算两种不同的散射方向:漫反射模型和高光反射模型。

漫反射:表示有多少光线会被折射、吸收和散射出表面。
高光反射:表示物体表面是如何反射光线的。

光照模型中包含不同的部分来计算光线经过物体表面后不同的方向
着色是根据材质属性(高光反射属性,漫反射属性等)、光源信息(如光源方向、辐照度等),使用等式去计算沿某个观察方向的出射度的过程。该等式即 光照模型(Lighting Model) 。

次世代渲染:BRDF光照模型
S3材质:次表面反射

BRDF

BRDF(Bi-directional Reflection Distribution Function)的含义
光和物体相交,会产生三种情况产生,反射,被吸收,折射, 即是

light incident at surface = light reflected + light absorbed + light transmitted

对于理想固体来说,折射不会产生,就只剩下前两项。

BRDF就是用于描述光与物体相交,光是如何反射的。

BRDF通常用一个数学表达式来表示,来看下它和哪些变量有关。

首先是光的波长 λ ,不同的光产生的反射不同。

其次对于物体的材质,如果不是均一分布的话,BRDF也不同,记材质坐标为u,v。

最后,还和入射光线与出射光线的角度有关。这里角度用球坐标来表示,分别记为和

标准光照模型

标准光照模型将进入到摄像机内的光线分为4部分,每部分使用一种方法来计算其贡献度。
光源-》物体-》相机

自发光

该部分用于描述当给定一个方向时,表面本身会像该方向发射多少辐射量。(如果没有使用全局光照,自发光的表面不会照亮周围物体,只会使本身看起来更亮)

标准光照模型中,自发光直接使用材质的自发光颜色: C ( e m i s s i v e ) = M ( e m i s s i v e ) C(emissive)=M(emissive) C(emissive)=M(emissive)

漫反射

该部分用于描述当光线从光源照射到物体表面时,会向每个方向散射的能量。

Lambert光照模型

漫反射光照复合Lambert定律:反射光线强度与表面法线和光源之间夹角余弦成正比
C d i f f u s e = ( C l i g h t ⋅ M d i f f u s e ) m a x ( 0 , n ^ ⋅ I ) C_{diffuse} =(C_{light} \sdot M_{diffuse})max(0,\hat n \sdot I) Cdiffuse=(ClightMdiffuse)max(0,n^I)使用 Max 函数是防止法线和光源方向点乘的结果为负,使物体前面被从背面来的光源照亮。

Half Lambert光照模型

半兰伯特模型是一种光线增强技术

C d i f f u s e = ( C l i g h t ⋅ M d i f f u s e ) ( α ( n ^ ⋅ I ) + β ) C_{diffuse} =(C_{light} \sdot M_{diffuse})(α(\hat n \sdot I)+β) Cdiffuse=(ClightMdiffuse)(α(n^I)+β)

半兰伯特没有使用max函数进行限制负值,对点积结果进行缩放后再做偏移。一般情况下,α和β的取值为0.5,0.5,这样将[-1,1]的结果映射到[0,1]。这样在原有兰伯特基础上,背光面取值为负的顶点在半兰伯特下,有了对应的到[0,0.5]的值,半兰伯特并没有物理基础,仅仅只是视觉加强技术而已。

高光反射

该部分用于描述光源照射到物体表面时,该表面在完全镜面反射的方向反射出多少能量。高光反射需要知道的信息比较多,有法线方向( n )、入射方向( I ),反射方向( r ),视角方向( v )等。

反射方向( r )可由入射方向( I )和法线方向( n )计算出来:
r = 2 ( n ^ ⋅ I ) n ^ − I r=2(\hat n \sdot I)\hat n-I r=2(n^I)n^I

Phong光照模型

计算出反射方向后,由Phong模型计算高光反射部分:
C s p s c u l a r = ( C l i g h t ⋅ M s p s c u l a r ) m a x ( 0 , v ^ ⋅ r ) M g l o s s C_{spscular} =(C_{light} \sdot M_{spscular})max(0,\hat v \sdot r)^{M_{gloss}} Cspscular=(ClightMspscular)max(0,v^r)Mgloss
light:光源颜色
M(spscular):反光度
v:物体到摄像机的方向向量
r:光线的反射方向向量
M(gloss):是材质的光泽度,(数值越大亮点越小),也成为反光度

Blinn-Phong光照模型

和上述的 Phong 模型相比,Blinn模型提出一个简单的修改方法得到类似效果,避免计算反射方向( r ),引入一个新的矢量( h )。

对视角方向( v )和入射方向( I )取平均后在归一化得到新的矢量( h ):
h ^ = v ^ + I ∣ v ^ + I ∣ \hat h =\frac {\hat v+I}{|\hat v+I|} h^=v^+Iv^+I

然后使用法线方向( n )和新的矢量( h )之间的夹角进行计算,而非反射方向( r )和视角方向( v )之间的夹角。

Blinn模型的公式如下:
C s p s c u l a r = ( C l i g h t ⋅ M s p s c u l a r ) m a x ( 0 , n ^ ⋅ h ^ ) M g l o s s C_{spscular} =(C_{light} \sdot M_{spscular})max(0,\hat n \sdot \hat h)^{M_{gloss}} Cspscular=(ClightMspscular)max(0,n^h^)Mgloss

如果摄像机和光源距离模型足够远的话,Blinn模型会快于Phone模型,这是因为,此时可以认为视角方向( v )和入射方向( I )都为定值,因此新的矢量( h )将是一个常量。但是当视角方向( v )或者入射方向( I )不是定值时,Phone模型反而更快。

环境光

该部分用于描述其他的间接光照。标准光照模型中,使用一种被称为环境光的部分模拟间接光照。环境光使用全局变量,场景中所有物体都使用这个环境光。

C a m b i e n t = G a m b i e n t C_{ambient} =G_{ambient} Cambient=Gambient

光照模型实现

光照计算可以在顶点着色器中计算,称为逐顶点光照,也可以在片元着色器中计算,称为逐像素光照。 标准光照模型仅仅是一个经验模型,并不完全符合真实世界中的光照现象。这种模型的局限性在于:

重要的物理现象无法表现出来,如菲涅尔反射
该模型各项同性,固定视角和光源方向旋转表面时,反射不会发生任何改变。而有些表面是具有各项异性的,如拉丝金属等
不过由于易用性、计算速度和得到效果都比较好,被广泛应用。

漫反射

在这里插入图片描述
在这里插入图片描述

Lambert光照模型

逐顶点光照
逐像素光照

Half Lambert光照模型

高光反射

Phong光照模型

逐顶点光照
逐像素光照
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JIQIU.YANG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值