Lightmass分析(二) 前置知识储备

Intro

Lightmass分析 系列文章前言及目录

本文会介绍一些 Lightmass 中涉及的基础概念, 理解这些内容会帮助你更轻松的分析UE代码.

光照贴图 Lightmap

光照贴图是一张记录物体表面辐射照度的纹理, 其中一般记录着预先烘焙好的场景光照, 因为装照传输是线性的, 所以其他动态光源所形成的光照可以在这个辐射照度值上进行累加. 光照贴图是现阶段主流的漫反射间接光照的解决方案.
UE 中的光照贴图看上去比较奇怪是因为 Lightmass 会对实际的数据进行球谐编码, 光照贴图上一半存储光照信息, 一半存储方向信息.
Lightmass分析(二) 前置知识储备_第1张图片

Lightmap UV

光照贴图使用的 UV 与一般的纹理 UV 有很大的差别. 光照贴图中每一个有效像素都对应着模型表面上的一个"点", 所以我们要求模型的每一个三角面在光照贴图上的 UV 相互之间不存在重叠.

TextureMapping

TextureMapping 是 Lightmass 用来保存中间数据和必要信息的结构. 比如物体表面的辐照度和光照贴图的尺寸等. TextureMapping 中的核心成员大多是一维数组, 但是实际上这个数组表示的是一个 2D 纹理.TextureMapping 本身没有特殊之处, 更多时候他就像是一个全局变量, 为特定流程提供必要的信息或提供保存数据的空间.

纹素 Texel

在 Lightmass 中一个经常要使用的概念是 Texel. Lightmass 的最终任务是产生场景中物体的光照贴图, 在计算过程中 Lightmass 系统经常需要知道光照贴图中某个像素在 3D 空间中表示的位置法线等几何数据. Texel 便是保存这一信息关联的载体. Texel 相当于同时存储 uv 坐标和几何数据, 通过 uv 坐标就可以得到我们需要的几何信息.

光栅化 Rasterize

光栅化是 Lightmass 中另一个经常出现的操作. Texel 中 uv 坐标和几何数据信息的关联正是在光栅化的过程中建立的. 光栅化之后相当于产生一个名为 TexelToVertexMap 的 2D 纹理.
光栅化最重要的价值: 遍历光栅化产生的 2D 纹理就相当于在遍历场景中物体表面的每一个"点".
Lightmass分析(二) 前置知识储备_第2张图片Lightmass 的光栅化与渲染管线的光栅化类似, 区别在于 Lightmass 要光栅化的三角形并不是经过投影等变换之后得到的, 而是整个模型表面上的三角形.

光栅化首先将一个一般的三角形水平分割为两个特殊的三角形, 然后进行水平线的扫描. 根据三角形两边的斜率计算出扫描线两个端点的坐标, 然后根据插值计算三角形内部纹素(Texel)的数据,
Lightmass分析(二) 前置知识储备_第3张图片

光栅化的抗锯齿

Lightmass 在进行光栅化时通过 SuperSampling 进行抗锯齿操作. 在计算每一个纹素时, 会施加一定的偏移然后进行多次光栅化取加权平均值.

另一个相关的概念是 Corner. Corner 的名字来源于其偏移要比正常的光栅化纹素偏移大一点, 刚好将他们包围起来. 每个纹素对应一个 Corner, 一个 Corner 内部记录了四个角落的信息. Corner 无需加权, 用来修正加权值异常的纹素.

Lightmass分析(二) 前置知识储备_第4张图片下图展示了光栅化 Corner 的过程
Lightmass分析(二) 前置知识储备_第5张图片

双向反射分布函数 BRDF

双向反射分布函数 f(x, wi, wo) 表示在 x 点处, 从 wi 方向照入的光有多少从 wo 方向反射出去. 我们一般通过对 wi 在半球方向上积分, 计算出 x 点处沿着 wo 方向上发射出去的光有多少. 这个积分是光照方程的核心组成部分.
Lightmass分析(二) 前置知识储备_第6张图片

你可能感兴趣的:(Unreal,Lightmass)