其實是第二次嘗試,第一次的方法不優就不放了
以前當然也是用過一般的Height map, Gerstner wave等等方法
但都缺乏能夠"捲"起來的這種海浪,就自己設計公式了
原理其實很簡單,作為一個即時位移的方法,面數足夠的Plane是必要的
這裡一個重點是,軸心要設定在邊緣,因為我希望它繞著x軸邊緣旋轉而不是中心點
這也是此方法的一個重點,計算旋轉角度如下:
一般來說旋轉計算就是固定一個量然後施加到所有頂點上
我把它改成根據Y軸方向的距離來變化旋轉量,越遠的旋轉越多,越近的旋轉越少
這樣就能達成捲浪啦~概念上算是挺單純的,這次也沒寫任何底層code
用Material Graph + Custom HLSL node就做了,主要是算完位移量後把結果連到WorldPositionOffset這個輸入
所以之後要最佳化的話,大概還是避不掉要自製Vertex Factoryㄏㄏ
因為現在相當於Transform兩次,一次是UE4內建的,另一次是自製的計算
能夠在Local-to-World的過程一次算完會更好
另外會想即時算就是為了隨機性,但如果測試久了以後發現其實沒那麼隨機
還是會考慮把計算轉為前處理工具,輸出成height map來用,不然至少也要用貼圖替換掉那些sine function呼叫