當前位置:
首頁 > 最新 > Unity粒子遇上著色器,引爆視覺特效

Unity粒子遇上著色器,引爆視覺特效

由Real-Time VFX舉辦的首屆「偉大的變形者」視覺特效大賽已落下帷幕,最終冠軍花落Micha? Pi?tek使用Unity中的粒子特效結合著色器實現的作品。今天這篇文章將由Unity技術經理鮑健運,為大家剖析該特效作品的實現過程。

下面先來看看這個特效作品的視頻:

根據Micha?的思路,他想實現的是類似於「鍊金術」一般的,強烈化學反應伴隨著奇特物理變形的效果。須臾間圓環膨脹扭轉,似銀瓶乍破水漿迸。一陣水銀瀉地之後,復凝結成一混沌,電光火石間化作靜置的茶壺。是不是非常的賞心悅目?現在就為大家解析如何實現這些視覺特效。

基本原理

該特效實質上是基於粒子系統驅動的著色器控制畫面的表現,場景中的粒子用於控制器物表面的凸起位置、強度和顏色。Micha?還同步處理了參考發射器(Emitter)生命周期的溶解紋理(Dissolve Texture),因此可以在Unity粒子系統呈現的動畫過程中看到淡出效果。

GIF/2K

為了進一步優化效果,場景還引入了具有質量和阻力係數的空氣阻力模塊,以及隨機化的吸引器模塊,它會針對每個粒子產生吸引力的效果,從而表現出凝結成混沌。

偽3D氣泡

Micha?撰寫了一些自定義的網格著色器,自定義粒子氣泡著色器以及自定義shuriken模塊。偽3D氣泡就是其中比較有趣的一個實現。

實現這樣的效果需要自定義Unity表面著色器(Surface Shader),該著色器包含以下參數:

法線貼圖,如下所示:

法線貼圖的強度倍數,主要用於控制法線的強度

噪音紋理用來對法線圖片與剪切紋理進行變形

剪切紋理

這裡的關鍵點是,使用法線緩衝(Normal Buffer)創建假陰影的環境光遮蔽(Ambient Occlusion),它有助於展現「3D」外觀。基於這樣的處理,就能表現出如下圖這樣非常「真實」的偽3D氣泡效果:

Melt Shader

回顧整個特效的過程,不難發現一切都是從熔化的圓環開始的。Micha?寫了一個叫Melt Shader的著色器,作用於圓環和茶壺之上。只要擁有適當的平鋪UV(tiled UV),並應用一些雜訊紋理,它就可以作用於任意網格。基本上這個著色器的參數都是由粒子系統驅動的,以下就是在材質檢視窗口(Material Inspector)的所有參數設置:

下面的簡短視頻顯示了這些著色器參數變化對於特效表現的影響。如調節中止閾值(Cutoff Threshold),可以改變圓環表面粗細及有無的變化顯示;改變中止遮罩速度(Cutoff mask speed),就直接改變了它們的變化速度;修改塌陷強度(Collapse Strength),會影響圓環表面的塌陷凹凸狀變化的效果;增加重力強度(Gravity Strength),會產生圓環在重力作用下向平面的塌陷效果。這些綜合起來可以理解為,這個著色器「擠壓」網格,並為它施加一個偽重力,即著色器越是給網格施壓,物體就越是靠近地面。假定地面是平坦的,就可以通過使用地形高度圖(Terrain Heightmap)作為一種地面等級來改善著色器的效果。

視頻中展現的著色器的另一部分,即調整噪音縮放(Noise Tiling),用於改變特效的隨機化程度。其實就是基於紋理的溶解和在頂點著色器中採樣的噪音紋理。

Melting Object

下面來分析粒子系統驅動的數據,Micha?使用粒子的尺寸(Size)和顏色(Color)來控制一些著色器參數。為了更好的進行參數調整,MeltingObject腳本除了引用了「熔化」對象的渲染器(Melting Object Renderer)和粒子渲染器(Particles Renderer),還添加了網格剔除值(Cutoff Value),塌陷強度(Collapse Strength,即重力)和發光強度倍數值(Emission Strength),以曲線的形式編輯。如下圖所示:

最後提交大賽評審的版本,事實已經禁用了粒子渲染,因為這些粒子只是為了將數據傳遞給著色器,不會執行任何其它操作。

下面的操作視頻打開了粒子渲染,幫助大家理解特定參數的調整所引起的變化:

那這些粒子到底是如何驅動著色器的呢?這點在Unity中實現並不複雜。

1、ParticleSystem有這樣一個API:

public int GetParticles(Particle[] particles);

其作用是將粒子數據寫入一個粒子數組作為緩衝,返回值就是該粒子的數量。

2、粒子的每個參數都可以被讀取,比如尺寸、速度、位置、顏色、透明值等。在運行時還可以使用GetCurrentColor、GetCurrentSize、GetCurrentSize3D,獲得當前狀態下的顏色、二維尺寸和三維尺寸

3、取得這些數值後,便可以通過「圓環」的渲染器,去修改應用該渲染器的材質的著色器參數。而這裡只需做幾件事:用尺寸(Size)設定點亮面積的大小;用透明值(Alpha)設置網格變形值;在粒子發射器的生命周期內,基於網格剔除值、塌陷強度和發光強度倍數的曲線進行變化。

這樣,就能產生粒子系統驅動著色器的效果了。

Post Processing Stack

為了表現絢麗的畫面效果,Micha?還在項目中添加了Unity官方的Post Processing Stack進行攝像機後期處理。

GIF/2K

上圖就是使用了圖像暈光(Bloom)效果,結合HDR產生流光溢彩的視覺體驗。此外,項目還運用了屏幕空間環境光遮蔽(Screen Space Ambient Occlusion)和運動模糊(Motion Blur)的後處理特效,使得特效的展現更為流暢平滑。

最後

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Unity官方平台 的精彩文章:

使用ARKit為iOS開發AR應用

TAG:Unity官方平台 |

您可能感興趣

Tobii:GPU顯卡可變速率著色技術是VR實現騰飛的重要機遇
iPhone XR比XS 晚發售的原因竟是鋁框架不容著色?
Shader Graph著色器視圖自定義節點API:Code Function Node
英偉達用Asteroids展示網格著色技術 顯著提高圖像質量
提升VR性能,微軟為DirectX 12增加可變速率著色VRS功能
Valve為AMD GPU開發新的Mesa著色器編譯器,編譯速度更快,遊戲幀數有所提高
3DMark新增VRS可變速率著色測試:幀率更高 畫質無損
專利顯示AMD或為帶來GPU帶來可變速率著色VRS技術
英偉達概述如何為VR集成注視點渲染+可變速率著色VRS
英偉達:圖靈顯卡的紋理空間著色可提升VR渲染的效率
一次四大顏值突破,OPPO R15要把玻璃機身著色「玩壞」
學會給多肉「噴水」,上色容易還好看,1招搞定葉子不著色的難題
女子嫌小貓毛髮不艷,便用著色劑給它染色,看到傑作後網友怒了
舊照片著色修復神器!自注意力GAN效果驚艷
vol.7-帶著色彩去春遊
毫無PS痕迹:高手著色的黑白老照片
毫無PS痕迹:高手著色的黑白歷史老照片!
製造核武器的核心材料「鈾」是什麼?早期的鈾化合物是用於瓷器的著色?這是真的嗎?
MIT又出新招:可重新著色3D列印技術
他熱衷於女性人體的繪畫,狂放的筆觸隨意的著色,使他贏得了國際讚譽