PBR物理光照Shader很多游戏引擎已经自带了,但是我们在定制渲染管线,优化渲染效果与修改Shader的时候需要对这些理论做一些基本的了解,才能修改的得心应手,今天我们对PBR物理光照的基本公式的原理来做一次数学推导,帮助大家掌握PBR Shader的基本计算原理,为后续做优化和定制做好准备,而这个也是面试时候必备,正在面试的同学可以来刷下这个文章。
对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。
主要的概念梳理
本文用到的一些概念,先在梳理一下,方便大家对照:
(5)漫反射: 光线被粗糙表面无规则地向各个方向反射;
(6)镜面反射or高光反射: 镜面反射是指若反射面比较光滑,当平行入射的光线射到这个反射面时,仍会平行地向一个方向反射出来;
(7)双向反射分布函数BRFD: 给一个入射角度和一个观察角度,它能给出一个决定最终射向观察角度的光的强度的系数;
(10):基于经验的光照与基于物理的光照: 基于经验的光照计算是指根据观察与经验得到的着色公式如Blinn-Phong,基于物理光照是基于物理理论的光照计算(PBR), 基于经验的公式是基于物理光照公式的某一种特殊的形势。
(11)菲涅尔现象F:在一个反射面上,当入射角度越“倾斜”,反射的光线越多,折射的光线越少,入射角度越“直”,折射的光线越多,反射的越少。
具体公式推导
我们先从经验光照模型的Blinn-Phong开始,然后再逐步的演变推导到物理PBR模式。
Blinn-Phong光照计算的公式如下:
这个公式表明: 光照计算 = 漫反射+高光反射。
Cdiff: 是漫反射的颜色;
Cspec:是高光颜色,或者叫镜面反射的颜色
N.L是表面法线