一、烘培系统

关于最基础的渲染算法和光照理论在前面的两个系列博客中讲过:光栅化实时渲染Opengl实时渲染器(一)架构搭建 – PULUO 光线追踪离线渲染Optix光线追踪渲染器(一)硬件光追原理与Optix入门 – PULUO,所以光栅化管线和光追算法的知识这里就先不写了,只补一些Unity特有的系统和概念。

首先一般的实时渲染引擎里都具备两大类光:实时光和烘培光

实时光:动态计算每一盏光对于场景中每一个顶点和片元的着色影响。优点:场景的物体可动态;缺点:开销太大,容易引起掉帧;同时只能计算一次弹射。

烘培光:把光线经过多次反射(光追)的效果计算在一张场景光照贴图(LightMapping)上,这张帖图作用于场景中所有物体的表面。优点:效果更好、没有实时计算的开销;缺点:对于实时运动的光源和物体不可用。

Unity一共提供了Enlighten、Progressive Lightmap两种全局光照GI系统(Enlighten已被废弃,就不提了)。这两种系统的内容比较相像,基本都提供了两种GI方案,一个是离线的烘培光,一个是实时的预计算光Progressive Lightmap的界面如下所示:

大部分选项都顾名思义,勾选stitch seams可以让烘培结果更平滑;放大Lightmap Resolution和Padding可以让烘培精度更高

烘培示例:

这里可以看到烘培出来的LightMap的样子: