看板 GameDesign 關於我們 聯絡資訊
基本上就是把頻率不同的雜訊疊加在一起 (如perlin noise, simplex noise, etc.) 用不同速度移動各頻率雜訊 我可以想到的做法有三種: 1. 在CPU上即時生成雜訊材質,傳入vertex shader vertex shader對雜訊材質取樣,用以位移水面的vertices 優點:時間軸上,不易出現重複的紋路 缺點:跟2.和3.比起來,較消耗CPU運算資源 雜訊品質受材質解析度限制 空間軸上,還是會注意到tiling產生的重複紋路(如果材質解析度太低) 2. vertex shader中,把vertex位置傳入雜訊函式取得位移量 ShaderToy上有不少shader雜訊函式範例 這是其中一個 https://www.shadertoy.com/view/Ms2SD1 優點:空間和時間軸上,皆不易出現重複紋路 雜訊品質不受解析度限制 缺點:跟1.和3.比起來,較消耗GPU運算資源 3. 事先生成不同頻率的雜訊材質(pre-rendered noise) 傳入vertex shader,用來位移水面的vertices 或者拿來當做normal map 優點:跟1.和2.比起來,消耗較少運算資源 美術人員對雜訊的視覺控制較大,容易設計stylized noise 缺點:空間和時間軸上,皆較易讓人注意到重複紋路 normal map沒有實際位移水面,容易讓人注意到瑕疵 雜訊品質受材質解析度限制 原po提到的Boom Beach看起來是用3.的方式產生水面normal map 然後再用個低頻雜訊位移水面的vertices 一般運算資源足夠的PC或主機遊戲,採用的是1.或2. -- Web http://AllenChou.net Twitter http://twitter.com/TheAllenChou LinkedIn http://linkedin.com/in/MingLunChou -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 160.33.43.15 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1435169976.A.595.html ※ 編輯: cjcat2266 (160.33.43.15), 06/25/2015 02:52:41
wyvernlee: 長知識,推! 06/25 09:24
cowbaying: 太神啦 06/25 09:45
waldfantasy: 推! 06/25 10:48
riveranb: 分享個人經驗上的小技巧,對於(3)準備normal-mapx1 06/25 15:15
riveranb: 在shader中計算不同 texel-UV 空間上的位移量 06/25 15:15
riveranb: 由不同texel-UV 位移方向來 fetch 該 normal-map 06/25 15:16
riveranb: 將fetch出來的結果做某些算式(如 average) 06/25 15:16
riveranb: 再取最後average的結果的 UV空間方向當成相位差(delta) 06/25 15:17
riveranb: 重新以原本的 uv+delta 的texel 再 fetch一次normal-map 06/25 15:18
riveranb: 用這樣的方式來模擬不同 wave 交疊的效果 06/25 15:18
riveranb: 當然, 仍是重複紋路:P 06/25 15:19
KanoLoa: 什麼時候wave交疊可以噴水花呢... 06/25 16:03