Lightmass分析(二) 前置知識儲備

Intro

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

本文會介紹一些 Lightmass 中涉及的基礎概念, 理解這些內容會幫助你更輕鬆的分析UE代碼.

光照貼圖 Lightmap

光照貼圖是一張記錄物體表面輻射照度的紋理, 其中一般記錄着預先烘焙好的場景光照, 因爲裝照傳輸是線性的, 所以其他動態光源所形成的光照可以在這個輻射照度值上進行累加. 光照貼圖是現階段主流的漫反射間接光照的解決方案.
UE 中的光照貼圖看上去比較奇怪是因爲 Lightmass 會對實際的數據進行球諧編碼, 光照貼圖上一半存儲光照信息, 一半存儲方向信息.
Lightmap

Lightmap UV

光照貼圖使用的 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 紋理就相當於在遍歷場景中物體表面的每一個"點".
TexelToVertexMapLightmass 的光柵化與渲染管線的光柵化類似, 區別在於 Lightmass 要光柵化的三角形並不是經過投影等變換之後得到的, 而是整個模型表面上的三角形.

光柵化首先將一個一般的三角形水平分割爲兩個特殊的三角形, 然後進行水平線的掃描. 根據三角形兩邊的斜率計算出掃描線兩個端點的座標, 然後根據插值計算三角形內部紋素(Texel)的數據,
光柵化

光柵化的抗鋸齒

Lightmass 在進行光柵化時通過 SuperSampling 進行抗鋸齒操作. 在計算每一個紋素時, 會施加一定的偏移然後進行多次光柵化取加權平均值.

另一個相關的概念是 Corner. Corner 的名字來源於其偏移要比正常的光柵化紋素偏移大一點, 剛好將他們包圍起來. 每個紋素對應一個 Corner, 一個 Corner 內部記錄了四個角落的信息. Corner 無需加權, 用來修正加權值異常的紋素.

Corner下圖展示了光柵化 Corner 的過程
光柵化Corner

雙向反射分佈函數 BRDF

雙向反射分佈函數 f(x, wi, wo) 表示在 x 點處, 從 wi 方向照入的光有多少從 wo 方向反射出去. 我們一般通過對 wi 在半球方向上積分, 計算出 x 點處沿着 wo 方向上發射出去的光有多少. 這個積分是光照方程的核心組成部分.
反射

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章