Unity-shader学习笔记(四)

Unity-shader学习笔记(四)

这里我们将会聊聊Unity中的基础光照及其有关知识

11 Unity中的基础光照

11.1 光源及辐照度

Unity中的光源想必大家都不陌生,所有的光都是从这个光源发射出来的。

在实时渲染中,我们通常将光源视为一个没有体积的点,并用l来表示它的方向。在光学中,我们也使用**辐照度(irradiance)**来量化光。

平行光与物体表面垂直,通过计算在垂直于l的单位面积上单位时间内穿过的能量得到其辐照度;

平行光与物体表面非垂直,假设入射光与物体表面法线的夹角为θ,平行光光线间的距离为d,那么辐照度就是与照射到物体表面时光线之间的距离d/cosθ成反比,即与cosθ成正比。而cosθ又可以使用光源方向l与表面法线n的点积来得到。

11.2 吸收与散射

光线由光源发出与物体相交后有两个结果:散射(scattering)吸收(absorption)

吸收不改变光线的方向,但要改变光线的密度和颜色;

散射只改变光线的方向,不会改变光线的密度和颜色,与吸收是相反的。

光线在物体表面经过散射后,有两种方向:①折射或投射-----光线将会散射到物体内部;②反射-----光线将会散射到物体外部。

对于不透明物体,通过折射进入物体内部的光线还会继续与物体内部的颗粒进行相交,其中一些光线最后会重新发射出物体表面,而另一些则会被物体吸收。对于那些从物体表面重新发射出去的光线,它们的方向分布和颜色与入射光线是不同的。

于是,我们在渲染物体模型时,在光照模型中会使用不同的部分来计算这两种散射方向:①高光反射(specular)用来表示物体表面是如何反射光线的;②漫反射(diffuse)表示有多少光线会被折射、吸收和散射出表面。我们根据入射光线的数量和方向可以计算出射光线的数量和方向,用出射度来描述它。辐照度与出射度之间的比值就是材质的漫反射和高光反射的属性。

11.3 着色

着色(shading)指的是根据材质属性(如漫反射属性等)、光源信息(如光源方向、辐照度等),使用一个灯饰去计算沿某个观察方向的出射度的过程,也称之为光照模型(Lighting Model)

光照模型的目的包括描述不同材质物体的表面等。

12 标准光照模型

什么是标准光照模型?

它只关心直接光照,也就是那些直接从光源发射出来照到物体表面后的、经过物体表面一次反射就直接进入摄像机的光线。

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

①**自发光(emissive)**部分:用于描述当给定一个方向时,一个表面本身会向该方向发射多少的辐射量。

②**高光反射(specular)**部分:用于描述当光线从光源照射到模型表面时,该表面会在完全镜面方向散射多少辐射量。

③**漫反射(diffuse)**部分:用于描述当光线从光源照射到模型表面时,该表面会向每个方向散射多少辐射量。

④**环境光(ambient)**部分:用于描述其他所有的间接光照。

12.1 环境光

间接光照指的是光线通常会在多个物体之间反射,最后进入摄像机。通俗的说,进入摄像机的光线经过了不止一次物体反射。

在计算时,环境光变量通常是一个全局变量,意思就是说场景中的所有物体都是用这个环境光。计算公式是:
c a m b i e n t = g a m b i e n t c_{ambient} = g_{ambient} cambient=gambient

12.2 自发光

这一部分主要算的就是直接由光源发射进入摄像机的光线的贡献度,直接使用的是该材质的自发光颜色:
c e m i s s i v e = m e m i s s i v e c_{emissive} = m_{emissive} cemissive=memissive
但要注意,尽管我们称之为自发光,但它并不能照亮周围模型的表面,也就是说这个物体并不会被视为一个光源。

12.3 漫反射

主要用于对那些被物体表面随机散射到各个方向的辐射度进行建模的。在漫反射中,视角的位置是不重要的,因为反射完全是随机的,因此可以认为在任何反射方向上的分布都是一样的,这也就说明,入射角度的光线很重要。

漫反射我们会使用兰伯特定律(Lambert’s law):反射光线的强度与表面法线和光源方向之间夹角的余弦值称正比。那么漫反射部分的计算就是:
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 ) 其 中 , n 是 表 面 法 线 , I 是 指 光 源 的 单 位 矢 量 , m d i f f u s e 是 材 质 的 漫 反 射 颜 色 , c l i g h t 是 光 源 颜 色 c_{diffuse} = (c_{light}\cdot m_{diffuse})max(0,n\cdot I)\\ 其中,n是表面法线,I是指光源的单位矢量,m_{diffuse}是材质的漫反射颜色,c_{light}是光源颜色 cdiffuse=(clight

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值