Pbr和一般光照模型的区别

pbr (physically based rendering) ,基于物理的渲染。

首先明确一点,物体有颜色是因为那些没有被物体吸收的光线(表现为物体的颜色)射入你的眼睛,你才感知到了颜色。从光照模型的角度来说,射入你眼睛的有两种光,一种是直接的反射光(表现为光本来的颜色),一种是折射进入物体后又散射出来的所谓漫反射光(即被吸收过了的光,也就是贴图的颜色)

pbr和原始的blinn-phong的最大区别就是,考虑到了光照的能量守恒,且 基于给定粗糙值的表面(片元),对于光的反射计算更加的符合统计结果。

大致的逻辑/概念:

对于单个片元来说

基于粗糙度,入射方向,观察方向,法线方向,先使用一个统计模型去估算出对于此片元来说,法线半球内所有入射光线经过直接反射进入到观察者眼睛的占比,也就是高光的占比(并根据法线分布函数和几何函数做调整)(在不考虑基于环境cubemap作为间接光源的情况下,单个直接光源对单个片元来说只需要计算一根入射光线,phong里就是这样,但是他没有能量守恒)。随后漫反射的占比就能通过1减去高光占比简单的算出来 (此为能量守恒)(折射进入物体后被吸收或二次散射出来,即表现为漫反射)(当然最后还是需要乘以熟悉的Dot(n,l))。

而这个统计模型中包含了三个核心函数。

菲涅尔函数:获取反射光总量的占比 (也就同时得到了漫反射占比)

法线分布函数:通过粗糙度常量和dot(n,h)的函数获得高光值...越光滑的表面,高光越集中、亮,反之,高光面积越大且越暗

几何函数:获取由于微表面的相互遮蔽,而造成的能量损失概率。

一旦有了反射光和折射光的占比 ,计算就和原来的光照模型差不多了(反射光总量即光线颜色,折射光即物体贴图颜色)。

至此,能获得的效果已经比传统模型好很多了。

而pbr的最终形态是同时考虑来自环境光照贴图(一个cubemap)的间接光照,被称为IBL(image based lighting)的东西。他不但需要cubemap还需要为cubemap预计算数据,这意味着预计算的数据又是一个新的cubemap。

不论是存储消耗还是运算消耗(需要在cubemap所有采样点的数据集中做卷积)都十分巨大,但是带来的视觉提升也爆表了。

 

 

 

 

 

 

你可能感兴趣的:(Unity,图形学和shader)