背景
前段时间面试被问过几次 PBR 的问题,遂写个博客梳理下,下次面试就不用再找资料了(不是x。也是对基础光照计算的一个梳理吧。
在传统的光照模型中,光会被分为环境光、漫反射和镜面反射三个部分。环境光是在没有明确光照但并非伸手不见五指的环境下,物体接收到的微弱光照的总和。漫反射是粗糙表面无规则向各个方向反射的光,而镜面反射是光滑表面向入射光沿法线对称方向反射的光。每个部分会进行单独的计算,并最终累加获得最终的光照结果。
PBR
基于物理的渲染算法(Physically Based Rendering),是当前光栅化渲染架构下广泛使用的基础渲染算法,足够支持基本材质的渲染需求。常用商业引擎如 unreal 和 unity 的默认渲染效果都是 PBR 渲染或基于此的扩展。当然不同的引擎、不同的硬件情况、不同的效果需要,PBR 的具体实现算法会有一些不同,但核心算法是相通的。这里的 PBR 使用的是 Learn OpenGL 和 Unreal Engine 中的算法和实现。