模拟正式光照环境生成图像时所需了解的相关概念
模拟真实光照环境生成图像的过程主要分为如下3个步骤
光源发射光线
光线与场景中物体相交,一些光线被吸收,一些光线散射到其他方向
摄像机吸收一些光,产生图像
光源
辐照度:光源发射的光的数量
平行光的辐照度:垂直于光的方向的单位面积上单位时间内穿过的能量
吸收
吸收:改变密度和颜色
散射
散射:改变方向
分为2类
折射:射到物体内部 漫反射
反射:射到外部 高光反射
出射度:出射光线的数量和方向(根据入射光线的数量和方向计算)
着色
根据材质属性和光源信息,使用一个等式(光照模型)计算沿某观察方向的出射度
标准光照模型(Phong光照模型)
只关心直接光照
直接光照:直接从光源发射出来照射到物体表面后,经过物体表面的一次反射直接进入摄像机的光效
基本方法:把进入摄像机的光线分为4部分,各部分使用自己的方法计算贡献度
自发光(emissive):给定一个方向,某表面本身会向该方向发射的辐射量
高光反射(specular):光线从光源照射到模型表面时,表面会在完全镜面反射方向散射的辐射量
漫反射(diffuse):光线从光源照射到模型表面时,该表面会向各方向散射的辐射量
环境光(ambient):其他所有间接光照
逐像素和逐顶点
片元着色器中计算光照模型:逐像素光照
Phong着色:在面片之间对顶点发现进行插值
顶点着色器中计算光效模型:逐顶点光照
高洛德着色:在各顶点计算光照,在渲染图元内进行线性插值,输出成像素颜色
Unity中的光
环境光
在Windows/Lighting/Settings中的AmbientOcclusion中设置
在Shader中通过UNITY_LIGHTMODEL_AMBIENT得到环境光的颜色和强度
自发光
在片元着色器输出最后的颜色之前,将材质的自发光颜色添加到输出颜色上
Unity中的漫反射光照模型
漫反射值 = 光的颜色 * 材质的漫反射系数 * 表面法线与光源方向的点积
最终的颜色 = 环境光值+漫反射值
逐顶点光照
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
// 逐顶点的漫反射光照
Shader "Fan/Diffuse Vertex-Level"
{