無限な海を作ってみた
はじめに
本記事の作成は
が提示した方法と
WaveformProvider ソースコードを改造することによって成り立つもの
どちらも素晴らしい記事で大変勉強になりました
無限WaveformProvider
まず、波をシミュレートするテクスチャを無限に延伸するのは無理です
そのため、メインキャラ近くしか波生成しません
つまり、メインキャラを中心に波テクスチャを計算する
あと、位置移動もあるので
以前のフレームで描画したテクスチャを参照した位置も対応処理が必要
O は前フレーム位置
O' はメインキャラの今フレーム位置
O'' は O' の前フレームの参照した位置
N は移動量
数式で表すと O'' = O + N
これを波動方程式に代入すると一応解決
メッシュ最適化と変動UV
ここまで来ると、やはり
【Unite 2017 Tokyo】スマートフォンでどこまでできる?3Dゲームをぐりぐり動かすテクニック講座
が提示したメッシュ最適化も実装してみたい
海のメッシュをカメラと連動する
そうすることで頂点数を変えずにより高品質化できる
実装はそんなに難しくない
ただそうするとUVはメッシュの位置と角度によって違う値になる
解決案として ワールド座標からUV座標を推算する
c は波生成範囲の中心点
r は波生成範囲の長さ
a位置のUVは (a-c) / (r*0.5) + 0.5
計算は頂点シェーダーで行う
結果
ここまでの問題点を洗い出す
- 海には見えない
波シェーダーを改造して 海に見えるように頑張ります
- 波生成範囲とキャラサイズのバランスがとれてない 理想の波が生成してない
いろいろ弄って 試行錯誤しかできない
- 魚雷撃たせたい
叶うといいね