UnrealEngine4Smear Frame效果的實現(xiàn)與分析
來源:
52vr |
責(zé)任編輯:傳說的落葉 |
發(fā)布時間: 2019-06-13 08:37 | 瀏覽量:
這篇文章介紹了類似守望先鋒中的幀轉(zhuǎn)移模糊(Smear Frame)效果。
該效果由Jan Kaluza實現(xiàn),本博客的介紹已獲得原作者同意。
Github地址:傳送門
效果
效果圖如下,兩個模型實際上都是球:
Tessellation
在本質(zhì)上,這個效果是使用PN Tessellation來對模型進行曲面細分,然后使用world displacement通道來進行頂點的偏移操作。Tessellation能夠給模型帶來更多的細節(jié),例如盔甲上的凹痕、地形的小起伏等。
但是需要注意的是:Tessellation非常耗費資源,并且Unreal Engine 4在目前為止(4.12.4)也只支持Windows平臺的Tessellation。所以如果需要使用Tessellation的話,需要注意性能以及多平臺的處理。
邏輯實現(xiàn)
需要實現(xiàn)這個功能,首先需要獲得當(dāng)前物體在前一段時間的偏移量,因此這里創(chuàng)建了一個Component,在每次Tick的時候更新Previous Position。在使用Previous Position進行計算最后,將最后的偏移量傳入Dynamic Material Instance進行計算即可。
完整BP如下:
材質(zhì)實現(xiàn)
前提條件
該材質(zhì)需要啟用Tessellation,選中D3D11Tessellation,設(shè)定為PN Triangles,記得啟用Adaptive Tessellation。
此外,由于在Vertex Shader中,無法轉(zhuǎn)換到Local Transform進行計算,所以這里需要兩個額外的UV通道用來傳遞Position信息,因此需要進行設(shè)定。
材質(zhì)函數(shù)封裝
CustomUV通道
在這個材質(zhì)函數(shù)中,將Position的X、Y信息儲存在Custom UV1中,將Z儲存在Custom UV2中。
偏移量的計算
Smear效果的特征之一就是這個模型的后面那一塊(運動反方向)會產(chǎn)生轉(zhuǎn)移模糊的效果,因此需要將Smear的方向與VertexNormal進行點乘,大于0的頂點才進行處理。
整個材質(zhì)函數(shù)便封裝完畢,使用方法如下:
注意事項
在Component的邏輯中可以看到Smear的表現(xiàn)效果與幀率有比較大的相關(guān)性。在幀率很低的情況下會導(dǎo)致Smear過大,在幀率很高的情況下則會導(dǎo)致Smear過小。
一種可行的方法是針對于Component進行鎖幀處理,讓其固定在一個幀率下運行即可。
我進行了這一塊的處理,并且已經(jīng)Pull Request。
-
分享到:
相關(guān)文章
網(wǎng)友評論
全部評論:0條
推薦
熱門