Fickle Swimming用Shader和VFX Graphs解釋了融化Unity中設置的岩石的槍支背後的邏輯。
介紹
我是Fickle Swimming,過去三年來我一直擔任Unity開發人員。我完成的最高學歷是高中。
項目構想
我有四個星期的假期,所以我決定花兩個時間從事某種個人項目。我的目標是製作一些“他是如何做到的”剪輯,以發佈到Reddit上。
我以前使用溶解著色器進行了Akira風格的爆炸,並使用基於新穎的模具的方法製作了《星際大戰》【雪球】。我認為如果將這兩個項目結合在一起,並添加一些Voxels,這可能是進行實時破壞的一種實用方法。
在遊戲中渲染Voxels的標準技術限制了藝術風格。我想刪除該限制。如果我想出某種方法將體素破壞與常規幾何體結合起來,那麼就可以將AAA質量的圖形與在Minecraft或Astroneer等遊戲中發現的可破壞性結合起來。我找不到以前做過此事的人,因此這是一個創造新事物的機會。
生產
首先,我必須想出一種在常規網格物體上進行Voxels破壞的方法。經過反複試驗,我得出了以下公式:
1.從一個或多個網格生成SDF,並將其存儲在3D紋理中。我為此製作了自己的生成器,但是那裡有很多免費的SDF生成器。
2.使用著色器渲染網格/網格,該著色器對SDF紋理進行採樣,並丟棄外部的碎片。這將在網格中創建孔洞。
3.射線行進孔洞以渲染內表面。這部分是最複雜的。在我找到可行的方法之前,我先使用深度預通過和模板緩衝測試了多種解決方案。
4.使用計算著色器通過對SDF進行減法運算來完成破壞。
該解決方案應適用於您將要放入遊戲中的大多數3D模型。為了證明這個概念,我認為我必須在一個漂亮的場景中演示它的工作原理。Unity的HDRP,Shader Graph,VFX Graph和Quixel Megascans給了我所需的大部分東西。
我通過在周圍散佈一些冰島岩石來建立場景。HDRP給了我閃電和後處理能力。VFX Graph給了我顆粒效果,例如火焰,煙霧,折射,熔岩和火花。VFX Graph有一個節點,用於將粒子與SDF碰撞,因此我免費獲得了該零件。
該光束是在著色器圖中完成的,它只是一個具有一些頂點位移和一些帶有動畫UV坐標的噪聲的圓柱體。
槍是費力的程序藝術。紋理是在物質中完成的。
它如何與紋理一起使用?
僅在新切塊上使用紋理,在生成熔岩粒子時,這裡有發光的動畫紋理可以平滑過渡。可以使用三平面映射將紋理應用於內部。
是否可以添加破壞物理?
這有點令人頭疼。我已經在類似的項目中看到它完成了,所以應該有可能。我在想也許我將在GPU上進行連通性測試,然後異步回讀以生成對撞機CPU端。我以前從未做過。另一個想法是使用某種加速結構來鏡像銷毀CPU端。
可以在遊戲中使用嗎?
效果並不像看上去那樣嚴重,我相信在遊戲中使用它是可行的。為了使其能夠在開放世界類型的遊戲中運行,必須實施某種基於距離的詳細級別方案。
您會改善什麼?
我覺得我做錯了熔岩。我花了很多時間只是想讓它看起來可以接受。下次我可能會走另一條路。