为什么需要光照模型
- 因为真实世界需要考虑的因素太多了 计算机完全模拟代价太大 通过简易化经验化的模型处理得到所需结果
局部光照模型
定义
- 局部光照模型是指只考虑光源经过物体反射进入摄像机的情况
- 全局光照模型除了考虑光源还要考虑 在其他物体上面的一些反射 最终进入摄像机的情况
组成
- 漫反射
- 高光
- 环境光
- 自发光
漫反射
- 定义:光照在经过物体表面后均匀散射
- 常见模型是兰伯特光照模型
- 漫反射不受视角方向影响
![[Pasted image 20211220125320.png]]
高光反射
- 高光反射可以看作光完全不被吸收进行反射
- 与反射方向和视角方向的夹角有关
- 可以定义pow
- ![[Pasted image 20211220130513.png]]
环境光
- 由于采用局部光照模型 缺少其他物体反射而来的光
- 所以采用环境贴图乘以物体表面材质来实现环境光
![[Pasted image 20211220144101.png]]
自发光
物体自身所发光发出来的一些亮点
经典光照模型
兰伯特光照模型
cos法线光方向 乘光颜色 乘材质颜色
![[Pasted image 20211220144912.png]]
phong模型
![[Pasted image 20211220144628.png]]
phong模型是包含了漫反射 高光反射 环境光
其中漫反射 ndotl乘albedo乘光颜色 漫反射漫反射光乘漫反射材质 高光反射为反射光与视线的cos值乘光颜色乘高光材质颜色
blinn-phong模型
v dot r 改成 h dot n
blinn phong 和phong的区别
- 相对于phong更加的具有艺术感 但是没有phong真实
- blinn phong 中h与n的最大夹角不超过90度
- phong 中 最大夹角超过90度cos为-会被约束到0而导致材质的缺失
- 本质上少了一个反射计算 效率提升大概1/3
flat模型
- low ploy风格
- 每个面一个法线一个颜色
作业
对于法线贴图的使用
- 法线贴图导入时会被unity自动压缩 需要使用unity自带的解压函数去解开 基本上就是做了一个坐标系的转换 同时导入之后是切线空间的需要被转换为世界空间下再去进行一个操作
对于环境贴图的使用
- 使用环境贴图 导入SamperCube类型的图片
- 在采样时候采用TextureCubeLod(_CubeMap,Float4(RGB为反射uv,z为一个改变mipmap的值))
Trick1
- 计算lambert时暗部死黑的解决办法:插值暗部为maintex乘diffuse贴图乘环境光 亮部为高光颜色乘maintex乘diffuse贴图
Trick2
不用PBR实现让金属带有一定的非金属的质感
![[Pasted image 20211220154815.png]]