資深技術貼:自動去光照,完美融入遊戲場景的黑科技

李奇 發表於 2021-01-27
以下文章來源於NExT Studios ,作者李奇

編者按:

2017年,故宮推出“VR博物館”,藉助3D掃描、VR、全景等先進技術,讓遊客突破了時空限制,搖身變成古人,在鮮活的歷史場景中行走、觸控和體驗。這項技術並不是只能重建放在博物館的藏品這樣的小型物體,對單座古建築或整體建築群,大型雕塑,或難以搬動的室外文物等的建模重建同樣意義重大。這無疑展示出了三維數字技術(照相建模)在文博考古行業的巨大發展潛力。

上一期我們分享了Photogrammetry(照相建模法)的生產管線流程,提到在外拍時受天氣影響,照片多少會有一些陰影,為了在引擎中重新著色需要去除這些環境關照資訊才可以。所以我們同時開發了Delight(去光照)工具,本文將重點分享去光照的一些方法。

作者:李奇,NExT程式設計師。資深單機遊戲玩家一枚,早到已經不記得幾歲開始玩遊戲的。偶爾會借NExT Game Jam過過遊戲開發的癮。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技
在NExT Game Jam現場演示Demo《目隱》

進入正題前,我想分享下MEGA Photogrammetry的Demo視訊,讓大家對照相建模法有更直觀的感知。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

當今引擎都是遵循基於物理渲染(Physically Based Rendering)理念的渲染管線,在遊戲引擎實際渲染時所使用的漫反射貼圖(Base Color Map)應該是不帶任何光照資訊的材質反射率資訊。

比較理想的拍攝環境應該是沒有陽光但又能保持一定亮度的陰天,但實際拍攝情況和場所總是有諸多限制,並不能保證我們每次拍攝都是如此理想的環境,採集到的環境光照一般都比較複雜。

下圖是擷取自Unity Delight工具介紹視訊的演示,明顯左側模型還帶著拍攝時的光照,右側模型經過去光照以後可以正常融入不同光照的場景中。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

就像下方左圖模型一樣,很明顯是帶光照的,那麼它由建模軟體生成的漫反射貼圖也是帶光照、陰影的,會和虛擬場景裡的燈光以及這些燈光計算的實時陰影產生衝突,我們需要使用去光照的手段來處理,才可以讓遊戲引擎按照當前的場景風格、時間、天氣等佈置光源,經由實時計算或離線烘焙重新進行光照計算,正常融入場景中。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

有時採集條件受限,我們得在有太陽光影響的條件下進行拍攝任務。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

由於現存重建技術的問題,我們基本只能採集粗糙表面的物體,所以我們假定物體一定是粗糙並不帶任何高光的。由於現存技術的限制,高光將會被自動平均化移除。我們將在以上假定的前提下進行去光照的還原計算。我們參考了現有的方案實現了環境光去光照。現存的閉源或開源的環境光或直射光去光照方案對直射光所產生的影子的去除結果都不理想,常常存在去不乾淨或者顏色溢位的情況,所以我們提出了一個更好的去光照方法。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

首先需要準備一些貼圖資料,因為在去光照工具中不會直接使用模型資料,我們需要生成下方左側的位置貼圖(Position Map)跟右側的法線貼圖(Normal Map),才可以在工具裡面完成剩下的Delight工作。這兩張貼圖如果使用模型資料轉寫,可以在 Vertex Shader 中讓模型頂點直接使用 UV 座標,然後正常光柵化即可簡單將頂點間插值的資料寫入貼圖。也可以結合到自動化管線中,由 Houdini(三維計算機圖形軟體) 直接烘焙所需貼圖。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

然後需要在模型上面,指定兩個點,就像下圖一樣,指定影子投影的原點,還有影子投出去以後的位置點,指定完以後,我們得到了一個直射光的方向資訊。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

有了直射光方向,我們便可以渲染模型自身的Shadow Map,把它直接轉寫成UV空間的Mask,用來標記哪部分是在影子裡,哪部分不在影子裡。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

後續去光照需要實現一個通用的LUT(Lookup Table 顏色查詢表)工具類,可以由模板引數指定任意維度和通道。需要實現以下功能:

1)支援任意維度和通道格式;

2)帶權重的採集功能;

3)任意維度取樣插值;

4)帶權重累加值的Mips;

為LUT生成Mips,將相鄰的畫素和顏色權重加起來獲得平均的顏色資訊,這樣就可以保證每一個座標都有采樣值可用,而且其也拿到了更平均化的資訊。

我們實際上還為LUT取樣,實現了線性插值,以改善結果。下方左圖是沒有插值的結果,右圖是插值後的結果,可以看到去光照有明顯的改善。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

我們主要採用了Unity Delighting Tool的演算法,實現了環境光去光照,主要原理是採集環境光照LUT,然後通過多次的LUT採集和取樣,讓整體顏色和亮度都更接近平均值。

主要流程如下:

1)生成所需世界法線、環境光遮蔽、可見性法線貼圖;

2)計算貼圖的平均色;

3)將表面顏色與平均色的亮度差採集到的法線經緯度座標的環境光照LUT;

4)應用查詢LUT得到的環境光照資訊去光照。

我們實現了去環境光遮蔽的結果可參見下圖右側。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

上述環境光去光照演算法在處理有太陽光(直射光)照射的模型時效果不佳,無法很好地移除直射光產生的陰影。在去除的投影是自投影,或者投影的圖元也同樣是生成模型的一部分的前提下,我們可以通過指定投影特徵原點、影子特徵點來判斷是否處於陰影之中。有了這些資訊,我們就可以通過計算平均亮度差或者平均光照強度,並去除直射光光照。主要流程如下:

1)生成所需位置、法線貼圖;

2)在模型上指定原點和投影點得到直射光方向並生成 Shadow Mask;

3)採集非陰影區域平均顏色資訊到LUT;

4)採集陰影區域平均顏色資訊到 LUT;

5)查詢兩張 LUT 對應位置得到亮度差進行去光照;

6)對邊緣進行亮度平均化後期處理;

我們實際上用了兩張五維的LUT,以貼圖讀取的位置和法線經緯度為座標,對漫反射貼圖的每一個畫素進行採集,然後將亮面和暗面的顏色累計到兩張LUT上,得到亮面和暗面的平均色資訊。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

對漫反射貼圖的每一個畫素,我們使用它的位置還有法線方向資訊,對兩個LUT分別進行查詢並計算亮度差,然後再用亮度差對陰影的部分進行Delight,就能得到去光照後的結果。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

以下是模型渲染結果。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

這個方法處理大多數模型沒什麼問題,但有些顏色比較複雜的模型,用這個方法可能會有顏色溢位的情況,導致結果不夠理想,所以我們還提出了第二個方法——影子邊緣提取。

首先對影子的Mask做邊緣提取,只保留位置和法線都連續的地方,這樣可以避免UV接縫的地方影響結果,以找到邊緣為中心,採集一定區域的畫素的平均色,這個大小是可以配置的,比如64×64,分成亮暗兩個部分的平均色,其中亮部在採集的時候就要考慮法線方向的影響。

然後以位置為座標,將剛才計算出來的光源亮度採集到一張LUT裡面,這樣LUT就儲存著區域的光照資訊,再對陰影中的畫素,進行LUT的查詢,既可拿到亮度資訊,然後就可以去光照。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

這是去光照以後的結果,下方左圖為原始模型,右圖為去光照以後的模型。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

作為對比,左邊是Agisoft去光照工具生成的結果,右邊是我們的Delight工具生成的結果,這樣看來,會更加自然一點。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

這是最終去光照的結果。
資深技術貼:自動去光照,完美融入遊戲場景的黑科技

我們現在將整套去光照流程,包括直射光的指定和貼圖的生成也都整合在Houdini(三維計算機圖形軟體)中,與之前介紹的整個自動處理管線流程也很好地結合在了一起。

資深技術貼:自動去光照,完美融入遊戲場景的黑科技

以上就是我們在去光照上做的工作。

後記

Photogrammetry(照相建模)技術尤其適合於忠實還原經過時間和自然沖刷,有大量自然形成的不規則細節的物體。例如古建築,殘破雕塑,或者是存在大面積精美細節的物體。這些原來如果要靠人工完成建模的話,即使有經驗豐富技術高超的建模師也往往需要投入1-2個月的時間處理一個模型,而且還不能保證百分百忠實還原。因此,此技術極大地減小了在建模方面的人力投入,並且保證還原的真實度,具有非常大的研究價值。


來源:NExT Studios