1. 程式人生 > >Unreal Engine 4 Smear Frame效果的實現與分析

Unreal Engine 4 Smear Frame效果的實現與分析

-s 產生 需要 一個 pla 固定 adapt 分享 行處理

轉自:http://www.52vr.com/article-868-1.html

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

Unreal Engine 4 Smear Frame效果的實現與分析