Unity shader光照基础
==你如果它看起来是对的,那么它就是对的 – 计算机图形学第一定律==
这里主要对光照的基础进行笔记。光照基础这里确实很费脑子,看了好久也没怎么理解。下面也主要是一些重点。
渲染一个环境,需要考虑:
- 光线从光源中出发
- 光线照射到其他物体后,会经过反射和散射。
- 最后进入摄像机中的光线就是最后渲染的图像。
光源
光源照射到物体,射入的能量可以用辐照度来量化。通常光源照射到物体会以两种形式,第一种是垂直照射,第二种是有一定夹角方向照射。
垂直方向其实很好计算,如果在不垂直的情况下,可以使用光线与表面的点积进行计算:
这里其实计算的就是光线在垂直方向上的分量。
光线的吸收和散射
光照照射到物体后,与物体相交会有两个结果:
1、散射。散射只改变光线的防线,不改变颜色和密度。
2、吸收。吸收只改变颜色和密度,不改变方向。
散射又包括进入物体内部的折射和直接在表面进行的反射。对于这两种不同的散射又不同的表示方法:高光反射表示直接在表面反射的光线,而漫反射表示进过内部折射的光线。
反射的光线可以用折射度来衡量。
着色
用数学方法去描述光线在物体上的照射过程,叫做光照模型。
BRDF(Bidirectional Reflectance Distributioni Function)方法使用一个数学公式去描述光线照射到一个物体之后的能力分布。
而在这个方法之前,通常会使用标准光照模型。
标准光照模型
经常使用的标准光照模型包含很多种:
- Phong模型
- Blinn模型
这些模型在描述光照的时候,将光照的部分分为4部分,每一个部分用不同的公式去计算:
- 自发光
- 高光反射
- 漫反射
- 环境光
自发光
自发光其实是物体能够自己发出光线的意思。在编程里最后在片元着色器后添加自发光颜色即可。
高光反射
高光反射是一种经验模型,模拟物体镜面反射。phong模型与blinn模型其实是不同的。
漫反射
漫反射符合兰伯特定律,但是由于漫反射是随机的,所有基本上漫反射在各个角度都是一样的。
环境光
环境光其实用来描述直接照射到物体的光照和简介通过其他物体反射照射的光照。