unity shader 入门精要(冯乐乐著) 读书笔记(四)

unity中的基础光照

  1. 基础光照的量化单位:辐照度

    因为辐照度与照射到物体表面时光线之间的距离d/cosθ成反比,故辐照度与cosθ成正比。

    θ可以与使用光源方向l和表面法线n的点积来得到。

在这里插入图片描述
图片来自网络 侵删

  1. 吸收和散射:

    光线由光源发射出来后会与物体相交,相交结果有两个:散射吸收

    散射的结果有两个:折射(透射)反射

    为了区分这两者,我们采用不同部分来计算他们:

    1、高光反射:表示物体表面如何反射光线。

    2、漫反射:表示有多少光线会被折射、吸收和散射出表面。

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

  2. 着色:

    指的是根据材质信息、光源信息、使用一个等式去计算沿某一个观察方向的出射度的过程。

    不同的光照模型有不同的目的:一些用于描述粗糙的物体表面,一些用于描述金属表面。

  3. BRDF光照模型:

    对真实场景进行理想化和简化后的模型,并不能真实地反映物体和光线之间的交互,称为经验模型。

标准光照模型

基本方法:把进入到摄像机内的光线分为4个部分,每个部分使用一种方法来计算它的贡献度。

  • 自发光:本书采用***cemissive***来表示,用于描述给定一个方向时,一个表面本身会向该方向发射多少辐射量,如果没有使用全局光照技术,这些自发光的表面并不会真的照亮周围的物体,而是它本书看起来更亮了而已。
  • 高光反射:本书采用***cspecular***来表示,用于描述当光线从光源照射到模型表面时,该表面会在完全镜面反射方向散射多少辐射量。
  • 漫反射:本书采用***cdiffuse***来表示,这个部分用于描述当光线从光源照射到模型表面时,该表面会向每个方向散射多少辐射量。
  • 环境光:本书采用***cambient***来表示,它用于描述其他所有的间接光照。
1.环境光

真实世界中物体除了受直接光照的影响外,还受到间接光照的影响,这些光线往往经过了多次反射后再进入摄像机。

为了方便,我们在标准光照模型中通常采用全局变量,所有物体采用这个环境光。

cambient = gambient

2.自发光

光线可以直接由光源发射进入摄像机,而不需要经过任何物体的反射。标准光照模型使用自发光来计算这个部分的贡献度,直接采用该材质的自发光颜色。

cemissive = memissive

实时渲染中自发光的表面往往不会照亮周围的表面(这个物体不会被当成一个光源

它发光了吗?如发

3.漫反射

入射光线的角度很重要

漫反射光照符合兰伯特定律:反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比。

cdiffuse = (clight · mdiffuse)max(0,n · l)

其中n代表表面法线,l是指向光源的单位矢量,***mdiffuse***是材质的漫反射颜色,***clight***是光源颜色,我们需要防止法线和光源方向点乘的结果为负值,这主要为了防止物体被后入从后面的光源照亮

4.高光反射

这是一个经验模型

我们需要知道的信息比较多,如表面法线,视角方向,光源方向,反射方向等

在这里插入图片描述图片来自网络 侵删

第四个向量反射方向可以通过其他信息计算得到:

r = 2(n · l)n - l

这样我们可以通过Phong模型来计算高光反射的部分:

cspecular = (clight · mspecular) max(0,v · r)m~gloss~

mgloss:指的是材质的光泽度,也被成为反光度,它越大,高光区域的亮点就越小

mspecular:指的是材质的高光反射颜色,用于控制该材质对于高光反射的强度和颜色

clight:则是光源的颜色和强度。

同样在此处也需要防止v · r的结果为负数

除了上述的Phong模型,还有一个更为简单的Blinn模型,避免计算反射方向r,引入了新变量h,通过vl的取平均后归一化得到得到。

即: h = (v + l)/|v + l|

然后使用n和h之间的夹角进行计算,而非v和r之间的夹角

cspecular = (clight · mspecular) max(0,n · h)m~gloss~

摄像机和光源距离够远时,Blinn模型会快于Phong(此时h是一个常量),反之则反之

策略选择

逐像素or逐顶点

逐像素(Phong着色):以每个像素为基础,得到它的法线(可以是对顶点法线插值得到的,也可以是从法线纹理中采样得到的),在面片之间对顶点法线进行插值的技术被称为Phong着色,也被称为Phong插值或法线插值着色技术,不同于之前的Phong光照模型

逐顶点(高洛德着色):在逐顶点光照中,我们在每个顶点上计算光照,然后会在渲染图元内部进行线性插值,最后输出成像素颜色,由于顶点数目远远小于像素数目,因此逐顶点光照的计算量往往要小于逐像素光照。但是由于逐顶点光照依赖线性插值来得到像素光照,因此当有非线性的计算时,逐顶点光照就会出现问题。

总结

这种模型有很多局限性,很多重要物理现象无法用Blinn-Phong模型表现出来,例如菲涅尔反射,而且是各向同性的,固定视角和光源时,旋转表面反射并不会有任何改变,无法表现各向异性的反射性质。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值