虛幻5渲染編程——DCC工具篇:Houdini


Houdini Nodes

Houdini相當於一個圖形沙盒工具集,可以自由地控制組合各種圖形數據,如今它已經成為了TA技能樹中必須要會的一項技能,所以我最近也開始研究Houdini。Houdini和其它DCC軟件有個不太一樣的地方在於它的大部分功能都封裝成了一個Node,可以供用戶調用,而其它傳統DCC軟件則是做成一個個功能按鈕。所以要想搞清楚Houdini,就需要先把各種Node和Node之間的組合搞清楚。(由於本節內容比較基礎,內容相對淺顯,此處不再展示,大家可根據需要自行前往作者主頁閱讀。

Loop Cloth Simulation

Houdini被譽為特效之王,很多時候在Houdini里做的好看的特效我們都想把它導出用到游戲里,但是游戲里的資源預算往往有限,所以我們需要把Houdini的一些模擬效果做成循環的。我翻找了些資料,做了循環布料模擬的案例。

效果如下:

 

【1】Environment setup
首先我們要配置好Houdini,我這里用的Houdini版本是18.5.532,需要先下載LabFX,配置方法在我之前的文章《為游戲開發配置各種DCC工具》里有提到。

 

【2】Create Loop Cloth simulation animation in Houdini
首先,我們需要在Houdini里制作好一個循環的布料模擬動畫。建一個Grid然后把它的位置調整一下。

 

然后Remesh一下模型,增加模型的頂點數,順便Auto UV一下,給它分下UV,我們可以用Visualize UV節點看下展開后的UV。

 

之后使用VellumCloth以及VellumSolver。

 

把布料結算節點連接起來。

 

然后把布料的一些頂點Pin起來,這樣就能讓布料固定住。

 

然后再在VellumSolver里調整一下模擬的風力。

 

最后再鏈接上MakeLoop節點,同時調整時間滑條,我從15幀模擬到120幀。

 

最后我們就在Houdini里得到了Loop的ClothSimumation了。

【3】Impot to UnrealEngine
我們做好循環模擬的素材以后,拿到引擎里用的方法有很多,比如拍成序列幀或者導出abc等方法,我這里直接把這個布料模擬的結果導出成abc文件到UE里,之前我的文章虛幻4渲染編程(DCC工具篇---Houdini)【Create SubUVTexture】有介紹過怎么導出序列幀。

 

我的導出設置如下:

 

然后我們得到一個abc文件,我們把這個abc文件導入到UE,導入設置如下:

 

Summary
LoopClouthAnimation.hip
鏈接: https://pan.baidu.com/s/10DKTCiV3Cr8H0lYbNMXOng
提取碼: 3sfl

Loop Fluid Simulation

Houdini里的粒子系統可以進行大量的離線模擬,如果我們能把這些離線的數據烘焙下來那么就可以背實時游戲所用,所以下面的例子我就把Houdini的流體模擬的結果烘焙下來並且做成循環播放的。結果如下:

 

 

 

【1】Fluid simulation animation
在開始之前,我們的第一步是先在Houdini中制作一個簡單的流體模擬場景,建一個Geometry節點,里面創建一個球,然后創建一個flipsource,最后加一個空節點導出。

 

 

 

這樣我們就有了一個發射源。

第二步我們建一個dopnetwork節點。

 

點開dopnetwork,在里面創建一個flipobject節點,設置如下圖所示:

 

然后創建一個VolumeSource節點,把剛才創建的發射源拾取進來。

 

Initialize設置成Source Flip。

 

然后創建一個Flip Solver和Gravity節點。

 

最后連到Output上最后我們得到了簡單的流體模擬的場景。

 

【2】CacheParticle and cahe fluid mesh
建一個GeometryNode。

 

創建一個dopimportfield。

 

把上一步的DopNet拾取進來然后創建一個filecache。

 

配置好路徑以后把點Save to disk 把Particle給Cache下來。

 

然后再建一個GeometryNode。

 

用File節點把剛才的粒子Cache給Load進來。

 

然后用particlefluidsurface節點把模型生成出來。

 

最后再CacheFile把生成的模型序列Cache下來。

 

 

 

完成這一步以后,再建個GeometryNode。

 

然后在里面創建一個file節點,把剛才Cache下來的Mesh序列幀load進來。

 

然后把模型轉換成VDB。

 

然后使用MakeLoop節點創建循環動畫。

 

之后再把VDB轉換成Mesh。

 

再Cache一下,這次Cache就得到了我們最終的循環動畫。

最后再建個GeometryNode把最終的循環動畫的Cache給Load進來就完成了。

 

 

 

【3】Loop Fluid Animtion to unreal engine
現在有了Loop的流體模擬動畫我們后續烘焙到引擎里的方式就很多了,可以做成VertexAnimationTexture,可以做成序列幀,可以做成abc,我之前的文章講很多了,下面我這里直接演示下做成abc的。

這里直接導出:

 

導出設置如下:

 

導入引擎設置如下:

 

Summary
FluidLoopAnimation.hip
鏈接: https://pan.baidu.com/s/1PiwuixVu7O-qa_9wECP3YA
提取碼: 1dvg

Houdini Ocean Simulation To UnrealEngine

Houdini有豐富的結算器,包括FFT海洋也有一套的系統。之前我寫過實時的FFT海洋,這次我使用Houdini把海洋解算出來,然后把結果烘焙成序列幀,然后導入引擎。

 

 

 

不過我這里沒有做海面的Shading只是簡單給了個顏色,主要做的是海面波浪部分。

【1】Create FFTOcean in Houdini

 

直接點擊預設,創建一片小海洋,進入海洋的GeometryNode,修改一下Grid的尺寸。

 

給海洋的片分一下UV。

 

對Ocean Spectrum參數做如下修改,因為我們需要的是循環的海洋,所以我們把Loop勾上,Loop的時間是總幀數除以幀速率。

 

 

 

 

 

把Render Grid的大小尺寸也修改一下。

 

然后在Render Preview里把海洋的displancement序列導出。

 

然后建個rop net work,里面加一個baketexture的節點。

 

 

 

把法線烘焙導出,然后來到img,把剛才導出的法線序列幀導入,用channel cop把法線信息拷貝出來,然后用vopcop2filter把通道替換一下即可。

 

最后把displancement和normal的序列幀做出來。

 

如果只使用Displancement和Normal,效果如下:

 

海面還缺乏白沫,所以我們還需要渲染一套白沫的序列幀。

 

 

 

 

 

我們給幾何體創建foam屬性,並且把它渲染出來即可。

 

 

 

【2】Create fft ocean material in unreal
通道交換在houdini里就做完了所以這里直接用subuv采圖就好了。

 

Summary
OceanCreator.hip
鏈接: https://pan.baidu.com/s/1ObcUkd_6AzWGolEAMv_r0Q
提取碼: tdfw


Reference

[1] Houdini: Vellum Cloth Simulation and export to Unreal
[2] Creating Real-Time Oceans for Call of Duty: WWII | Matt Vitalone | GDC 2018
[3] 用Houdini去trick的簡單FFT海水效果

這是侑虎科技第1033篇文章,感謝作者YivanLee供稿。歡迎轉發分享,未經作者授權請勿轉載。如果您有任何獨到的見解或者發現也歡迎聯系我們,一起探討。(QQ群:793972859)

作者主頁:https://www.zhihu.com/people/SuperPandaGX,再次感謝YivanLee的分享,如果您有任何獨到的見解或者發現也歡迎聯系我們,一起探討。(QQ群:793972859)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM