室內映射:高效室內渲染方法簡述

導語

Interior Mapping 是一種用於實現建築室內結構在遊戲、虛擬現實、建築可視化等領域內的高效渲染技術。相比於傳統的建模渲染或者貼貼圖,Interior Mapping 可以在保持高效率和高質量的同時,將室內的細節和燈光效果呈現得更為逼真。因此,它極大地拓展瞭虛擬建築場景的可能性。

前言

Interior Mapping(室內映射)技術在遊戲中有著廣泛運用,其通過在建築物表面上貼上模擬室內結構的紋理方式,產生具有逼真室內的視覺效果。由於Interior Mapping使用貼圖和材質計算來實現室內立體空間視效,避免瞭使用實際模型帶來的三角面數的增加,適合城市建築群等中大規模場景的渲染。大傢熟知的《黎明覺醒》《蜘蛛俠》《城市天際線》《美末2》《黑客帝國覺醒》等,都采用瞭此技術。

《蜘蛛俠》效果展示https://www.zhihu.com/video/1685339719909777408

Interior Mapping常見的采樣的紋理有兩種,分別是立方貼圖(CubeMap)和2D貼圖。本文將分別展示這兩種方法的實現,並簡要分析其對應的材質計算原理。盡管 Interior Mapping 提供瞭一種簡便的室內效果模擬方法,但其表現仍無法完全取代完整的三維室內建模。為此,本文還將介紹一些技巧,以盡可能提高該效果的真實性。

一、Interior map紋理準備

Interior map可以選擇兩種形式的貼圖進行展示:CubeMap貼圖和2D貼圖。選擇這兩種貼圖形式各有優劣。

CubeMap的優點在於它的立體表現最好,也可以更靈活地調節深度;而且由於它存儲瞭6個面的信息,可以通過對CubeMap隨機旋轉獲得四種表現。缺點是同時它也會有比較大的存儲量,並且不好編輯。用於室內模擬的CubeMap可以通過UE引擎中的Scene Capture Cube組件對室內拍攝軸對稱立方體貼圖獲取,參考:(2) Basic Interior Mapping Shader | Unreal Engine – YouTube。如果使用普通的、常用於提供光照環境的CubeMap有可能出現六面墻無法對齊的情況。

CubeMap使用的貼圖示例:

CubeMap Interior Map 深度調整:

https://www.zhihu.com/video/1685339901980119040

CubeMap Interior Map 角度隨機:

也可以用預先投影的2D圖代替CubeMap,好處是2D貼圖方便做圖集,缺點是這樣的2D圖如果調整深度會有邊緣上的拉伸。在ArtStation – Forza Horizon 4 – Buildings能找到《極限競速:地平線4》制作時使用的內部貼圖圖集。

預投影的2D貼圖示例:

2D Interior Map 深度調整:

https://www.zhihu.com/video/1685340064119545856

綜上,CubeMap的視覺表現更好,而預投影的2D貼圖有更好的性能。

二、Interior map材質實現

如果是基於CubeMap的interior mapping,需先現在切線空間計算射線與立方體內表面的交點P,以P的坐標作為UVW采樣CubeMap。使用切線空間的原因是這樣即便在曲面上,虛擬立方體的表面依舊是能和曲面對齊的。

在UE引擎中內置的InteriorCubemap函數實現的就是這一功能。

其中,完成UVW計算的部分為:

這一材質函數剩下的部分完成瞭一個對CubeMap隨機旋轉的計算。

在這裡筆者簡單講解一下這一UVW的計算思路。要想計算視線射線與虛擬房間立方體相交的點,這裡用到的是AABB(Axis-Aligned Bounding Box,軸對齊包圍盒)算法。算法整體如下:

1.將相機向量轉換到切線空間計算射線向量。這裡取倒數是為瞭更方便計算下一步AABB算法計算交點。

2.使用UV計算入射位置。此處觀察的像素點即為射線開始發射的起點。在這一計算空間中我們把坐標點放在中心點,並且將單軸范圍限制在瞭(-1,1),因此我們的立方體表示為(Bmin,Bmax),Bmin=(-1,-1,-1),Bmax=(1,1,1)。

3.AABB求交計算。首先我們需要計算射線穿過AABB立方體每個平面的參數t,對於每個平面我們可以使用以下公式:

tX1 = (minX – x0) / dx;tX2 = (maxX – x0) / dx;

接下來找到t在各個方向上的最小和最大值,即交點范圍:

tmin= max(min(tX1, tX2), min(tY1, tY2), min(tZ1, tZ2));

tmax= min(max(tX1, tX2), max(tY1, tY2), max(tZ1, tZ2));

最後如果tmin <= tmax且tmax > 0,則說明射線與AABB立方體相交。

值得一提的是,由於這裡我們隻在乎射線與立方體相交中的更遠的那個交點,即tmax,因此我們這裡也隻計算瞭這個值。但由於AABB的特性,根據射線方向計算出的tmin值可能大於tmax值,因此當 t2 小於 t1 時,我們需要交換它們的值。即,當射線方向的x分量大於等於0時,用最大邊界值減去射線原點x坐標除以射線方向的x分量來計算tmax;當射線方向的x分量小於0時,用最小邊界值減去射線原點x坐標除以射線方向的x分量來計算tmax。其他方向同理。

if(dx>=0)

{

tmin = (minX – x0)/dx;

tmax = (maxX – x0)/dx;

}

else

{

tmin = (maxX – x0)/dx;

tmax = (minX – x0)/dx;

}

節點算法這裡做瞭進一步的優化,通過增加絕對值的方式替代瞭上面的分支計算。從而保證瞭我們計算得到的tmax一定是大於tmin的。

最後交換交點坐標順序得到正確的UVW。

至此得到的UVW就可以用於采樣CubeMap瞭。如果需要控制深度,可以調節FarFrac參數縮放切線空間的z軸的值。同理也可以這樣調節室內CubeMap的長寬比例。

基於2D圖和基於CubeMap的interior mapping算法的前半部分相同,在求出p點坐標後,再用P.z縮放P.xy獲得2D uv,然後采樣2D圖即可。

2D貼圖整體節點實現圖如下:

三、Interior map 材質優化

Interior map雖然提供瞭很好的室內立體視覺效果,但隻有Interior map制作的假窗戶視覺效果是單調的。這一技術通常與以下手段配合使用,以獲得更好的材質表現。

1.更多層次感:增加玻璃細節和窗簾

除瞭立體的室內環境,一個逼真的玻璃窗還應該有玻璃、窗框、窗簾等修飾。對於玻璃,可以增加反射、折射、破損和臟漬效果,使其視覺效果更加豐富。對於使用2D紋理進行采樣的假室內效果,在觀察視線與平面法線夾角較小的情況下容易出現邊緣上的拉伸,而增強玻璃的菲涅爾反射可以有效地掩飾這點瑕疵。窗簾具有漫反射和半透明紋理,可以不讓室內的自發光透過厚實的窗簾,半透明的百葉窗,和復雜的花邊。窗簾貼圖和室內貼圖排列組合使用,可以得到更多窗戶變體。

[ 圖源:《interior mapping進階》(https://zhuanlan.zhihu.com/p/509190380) ]

2.增加傢具:視差貼圖和“3D打印”

無論是CubeMap還是2D紋理,隻能對“靠墻”的元素有好的表現。因此紋理中的元素通常是書架、木地板、帶圖案的墻紙、掛畫,以及部分靠墻傢具。如果是室內正中心的沙發、桌子這樣的元素則無法表現其立體度。對於這種傢具,有兩種解決辦法:

• 視差貼圖:使用Bump offset增加一層或者多層傢具圖層,使其居於不同的深度,從而產生更豐富的視覺效果。這個方法的優勢在於簡單高效,缺點在於它本身還是一個2D的平面,構成的立體感有限。

[ 圖源:[技術演講]黑客帝國覺醒:創造世界(https://www.bilibili.com/video/BV1TP4y1T7Pj/?vd_source=7dea786fd58db72c7f661df3d81ed44f) ]

• 3D打印傢具:這一方法是由《黑客帝國覺醒》提出的,本質是一個從後向前逐步推進的一個bump offset計算。為瞭完成這個效果需要提供前後的深度圖以及HDR圖。這一方法得到的結果並不是如同raymarch一張體積貼圖那樣準確,但是相應的需要提供的貼圖更簡單,並且在假室內這個場景下效果適用

https://www.zhihu.com/video/1685340692459810816

3.光影調節

在《黑客帝國覺醒》中,可以為每扇窗戶添加隨機色溫和曝光的變化,從而增加材質變體。同時可以通過調整室內自發光強度,調整是否亮燈,從而實現晝夜的改變。

在Andrew Gotow的工作中還提到瞭一種為室內環境增加天光的投影的方法。這一方法更適合模擬白天的室內環境,太陽直射光會透過玻璃投射陰影,並且這一陰影會隨著陽光角度移動。這一陰影的計算相對簡單,我們可以將窗框的Alpha通道作為陰影蒙版,認為不透明的區域會投射陰影,根據之前計算interior map得到的交點的位置,根據太陽光方向向後投射光線,得到射線與外墻的交點,並且采樣外墻窗框的Alpha通道即可。更進一步地,還可以使用SDF貼圖實現軟陰影效果,並且進行陰影軟硬的調節。

https://www.zhihu.com/video/1685340897389166592

總結

Interior Mapping作為一種高效的室內模擬方法,在2008 CGI會議上由Joost van Dongen提出。在現在的遊戲、VR等領域仍具備顯著的性能優化及視覺體驗提升價值。在未來,Interior Mapping有望不斷發展和改進,為我們帶來更出色的效果。

參考資料:

【1】案例學習——Interior Mapping 室內映射(假室內效果), https://zhuanlan.zhihu.com/p/376762518

【2】interior mapping進階, https://zhuanlan.zhihu.com/p/509190380

【3】剖析UE5《黑客帝國:覺醒》窗戶系統—1.窗戶材質, https://zhuanlan.zhihu.com/p/561140341

赞(0)