shader入门精要读书笔记11 基础光照模型

渲染包含了两大部分:
1.决定一个像素的可见性
2.决定这个像素上的光照计算

一、光照模型背后的基本原理

1.光源:

在光学中,我们用 辐照度 来量化光(确定一个光源发出了多少光),
光方向为L,光线间距为d
垂直照射时,物体表面光线间距d,垂直时θ为0,也可以表示为d/cosθ。
斜着照射时,物体表面光线间距为d/cosθ,θ为光线与物体法线夹角。
物体表面光线越密集,辐照度越大,所以辐照度与d/cosθ成反比,与cosθ成正比。
cosθ可以通过光源方向L和法线的点积得到。这就是点积计算辐照度的由来。

2.吸收和散射

光线与物体相交时,两种结果:吸收或者散射。
散射改变光的方向,但不改变密度和颜色。而吸收相反。
散射又分为:折射和反射。
为了区分这两种不同散射,光照模型中两种部分表示:高光反射和漫反射。
高光反射部分表示物体表面如何反射光线,漫反射部分表示有多少光线会被折射、吸收、散射出表面。

根据入射光线的数量和方向,我们可以计算出出射光线的数量和方向,使用出射度来描述。
辐照度和出射度是满足线性关系的,他们之间的比值就是材质的漫反射和高光反射属性。

3.着色

着色指 根据材质属性(如漫反射属性)、光源信息(光源方向、辐照度等),使用一个等式去计算沿某个观察方向的出射度的过程。
我们把这个等式就叫做 光照模型 。
不同的光照模型有不同的目的,例如,一些用于描述粗糙的物体表面,一些用于描述金属表面等等。

4.BRDF光照模型(经验模型)

这个BRDF模型是用来解决 光线从某个方向照射到一个表面时,有多少光被反射,反射方向等等。
BRDF大多使用一个数学公式来表示,并且提供一些参数来调整材质属性。
(就是给定入射光线方向和辐照度后,BRDF可以给出某个出射方向上的能量分布)。

二、标准光照模型

基本理念:只关心直接光照(直接从光源发射出来,照射到物体表面,经过反射直接进入摄像机的光线)。

基本方法(将进入摄像机的光线分为4部分):
自发光:c(emissive),描述给定(出射)方向时,一个表面本身会向该方向发射多少辐射量。
高光反射:c(specular),描述光线从光源照射到模型表面时,该表面会在完全镜面反射方向散射多少辐射量。
漫反射:c(diffuse),描述光线从光源照射到模型表面时,该表面会向每个方向散射多少辐射量。
环境光:c(ambient),描述其他的所有间接光照。

1.环境光
指其他的所有间接光照,是一个全局变量,场景中所有物体都是用这个光照。
c(ambient)=g(ambient)

2.自发光
直接使用该材质的自发光颜色 c(emissive)=m(emissive)。
通常实时渲染中,自发光的表面不会照亮周围的表面,也就是这个物体不被当成光源。

3.漫反射
漫反射光照满足兰伯特定律:反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比。
c(diffuse)=(c(light)·m(diffuse)) max(0,n·l)
c(light)是光源颜色,m(diffuse)是材质的漫反射颜色,
我们需要防止法线与光源方向点乘的结果为负,所以截取到0,防止物体被后面来的光源照亮。

4.高光反射
高光反射是一种经验模型,而不符合现实现象。
用来计算沿着完全镜面反射方向被反射的光线,这种可以在金属材质表面适用。
反射方向的计算(字丑勿嫌):
在这里插入图片描述
两种模型计算方式:

Phong模型:
c(specular)= (c(light)·m(specular))max(0,v·r)(max()的m(gloss)次方)
m(gloss)是材质的光泽度(反光度),控制亮点额宽度、大小,它越大,亮点越小。
m(specular)是材质的高光反射颜色,控制高光反射的强度颜色。
c(light)是光源的颜色强度。

Blinn模型:
h=(v+l)/|v+l| (引入新矢量h)
c(specular)= (c(light)·m(specular))max(0,v·h)(max()的m(gloss)次方)

区别:
在硬件实现时,会认为v、l等为定值,这样h就是一个常量,所以Blinn会快一些。
而当v、l不定值,那么Phong可能会更快。
两种情况没有关系,也不存在谁比谁好,还是要视情况而定。

5.逐像素、逐顶点

片元着色器—逐像素
我们以每个像素为基础,得到它的法线(可以是对顶点法线插值得到的,也可以是从法线纹理中采样得到的),然后进行光照模型的计算,这种在面片之间对顶点法线进行插值的技术被称为----Phong着色。

顶点着色器—逐顶点
我们在每个顶点上计算光照,然后在渲染图元内部进行线性插值,在输出成像素颜色。----高洛德着色。

由于顶点数目往往小于像素数目,所以逐顶点会快于逐像素。
但逐顶点是依靠线性插值,这样当光照模型中存在非线性计算时就会发生问题。

总结:

标准光照模型–也叫 Phong光照模型—Blinn-Phong光照模型。
也有局限性,很多物理现象不能应用(例如菲涅尔反射:视线垂直于表面时,反射较弱,而当视线非垂直表面时,夹角越小,反射越明显)。

Blinn-Phong光照模型是 各向同性(书中是不是写错字了哈哈) 的 ,也就是说当我们固定视角和光源方向旋转平面时,反射不变。
而有些表面是 各向异性 的,例如金属、毛发等,这时我们需要使用基于物理的光照模型。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值