面向技術美術的一個挺實用的分享, 其中有些做法可以開闊思路

Analytical Simulation(解析模擬/模擬)的定義: 使用數學驅動行為.

主要是在Vertex Shader中使用各種參數化的數學行為配合UV和Distance Field來實現各種效果

基本思想: 把想要的行為抽象成函數, 然後運行時根據函數計算結果. 而傳統的套路是每幀更新行為結果寫入Buffer. 比如大多數的粒子系統就是這樣, 根據一個規則(比如重力)計算粒子的位置, 每幀寫進一個Buffer去更新

相對於傳統的做法, 好處當然是又省內存又省計算了, 因為是基於數學的, 結果可以保證確定性

舉了個最簡單的函數例子: 經過原點的直線

簡單的說, 就是 輸出=函數(輸入)

Sin函數就很常用, 輸入時間輸出波形運動, 風/水/震動/彈性/煽動的翅膀/彈跳的球等都能用到

彈跳的球就是把Sin函數取了絕對值

視頻封面

00:08

轉成VertexShader

UE4中的VertexShader是體現在Material中的WorldPositionOffset上

視頻封面

00:11

不想時間輸入是負值就做個Clamp操作

視頻封面

00:05

Time-StartTime的方法, 可以用來做自動的FadeOut, 好處是不用每幀都去更新這個材質

節點實例, 一開始需要設置參數: LifeTime(生命周期), SpawnTime(開始時間), FadeTime(淡出時間), 後面就不用管了

配合Blueprint來設置參數, 使用Delay節點來銷毀Actor

視頻封面

00:05

把上面這個淡出的例子中的函數換成Sin, 就可以變成一個跳躍的Shader

把Sin函數的結果寫入Z軸偏移, 就變成跳了

視頻封面

00:05

VS中可以相對任意點進行縮放, 比如可以把頂點都收縮進原點

視頻封面

00:03

演示示例

把上面的跳動部分和縮放部分整合到了一起

循環效果, 基礎是frac操作, 截取小數部分. 如果輸入時間, 會一直重複輸出0~1的值

有時需要進行基於時間的調試, 可以用這個節點切換成手動檔, 自己輸入時間值看結果的變化

UE4個VectorNoise的節點, 這介紹一下它的Cellnoise模式, 輸入一個三維整數輸出一個三維隨機向量, 每個分量都是0~1的值, 非常適合針對線性的索引(index)做隨機效果

頂點色一般是8位的, RGB都是0~255的取值範圍, 而在Shader中是0~1的範圍, 乘上255就可以還原出原來的整數. 使用兩個通道就可以保存0~65535的整數索引

為了避免浮點數精度問題, 可以+0.5相當於四舍五入

視頻封面

01:46

演示示例

視頻封面

00:08

說說Fornite中的一個例子

一個愛心的效果, 用了個StaticMesh, 由很多小四邊形組成的. 這麼做的原因是使用Cascade粒子編輯器很難做出這種形狀.

視頻封面

00:04

Sprite節點可以把多邊形變成朝向相機的

視頻封面

00:05

頂點法線保存了心形的法線, 頂點色R通道保存了隨機值

隨機縮放和位置偏移整到一起, 其它的參數整合到一個DynamicParameter節點裡, 這樣可以在Cascade中使用曲線進行控制.

(一篇文章只能傳10個視頻, 只能分兩篇發了)


推薦閱讀:
相关文章