Begin ray marching in unreal engine 4【第五卷:使用偽3D體紋理渲染雲】

Begin ray marching in unreal engine 4【第五卷:使用偽3D體紋理渲染雲】

來自專欄 虛幻4渲染編程

專欄目錄:

小IVan:專題概述及目錄?

zhuanlan.zhihu.com圖標

按照慣例默默膜拜ryan大佬三分鐘。

下面還是先上效果吧(3Dexture)

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

是個非常簡單的體積雲渲染(大佬請直接右上關閉瀏覽器)。

前面一節已經總結了,體渲染現在就大致三種,spherehit快速查找表面,segmenthit對光線方向積分濃度,還有一種就是raytracing。我們要渲染煙霧這種東西的時候,需要對光纖方向進行濃度積分。

煙霧渲染還可以分兩種,一種是使用3Dtexture還有一種是使用公式構建的方式。兩種方式其實都可以渲染出不錯效果的體積煙霧或體積雲。

下面是我拿公式計算的,上面那個視頻是3Dtexture計算的。

可以看到其實都可以得到不錯的效果。兩種方法的主要區別就是距離場的構建方法。剩下的渲染部分的幾乎是一致的。

下面是偽3Dtexture的方法,公式計算的我就不介紹了。

可以看到距離場的獲取方式是采一張偽3Dtexture。

這張偽3Dtexture長這樣。因為虛幻不支持3Dtexture所以這裡使用一張2D的序列貼圖,然後把這張序列貼圖疊成一個體紋理狀,如下圖所示:

這種假3Dtexture的sample函數:

可以看到消除堆疊鋸齒的方法是使用插值:

堆疊鋸齒

需要sample一張貼圖,在2D情況下是使用UV坐標,三維體素紋理自然需要一個3D的參數來sample一個3Dtexture,把它叫做UVW吧。因為我們的體素紋理是一個方塊,所以我們用一個3D單位cube來模擬它的UVW。我們獲取這個渲染物體的boundingbox然後把它變成一個單位cube。

虛幻中可以通過這個節點拿到這個UVW坐標

攝像機要轉換到local空間

Enjoy It !

OpenDay見到了虛幻創始人和zak

看了zak 四年教程,他的聲音早已非常熟悉,想想以前拿zak的教程當MP3聽來練習英語聽力的經歷,感覺胸前的紅領巾鮮艷了許多呢。希望有一天能成為他那麼強的TA,Ryan大神沒來有點小失落。


推薦閱讀:

TAG:虛幻4遊戲引擎 | 虛幻引擎 | shader |