バグヒトツ

Unity を使ってゲーム開発日記

無限な海を作ってみた

はじめに

 本記事の作成は

www.slideshare.net

が提示した方法と

esprog.hatenablog.com

 

 WaveformProvider ソースコードを改造することによって成り立つもの

 

どちらも素晴らしい記事で大変勉強になりました

 

無限WaveformProvider

まず、波をシミュレートするテクスチャを無限に延伸するのは無理です
そのため、メインキャラ近くしか波生成しません
つまり、メインキャラを中心に波テクスチャを計算する

 

あと、位置移動もあるので
以前のフレームで描画したテクスチャを参照した位置も対応処理が必要

f:id:sigmalin:20180321125347p:plain

O  は前フレーム位置
O' はメインキャラの今フレーム位置
O'' は O' の前フレームの参照した位置
N  は移動量

数式で表すと O'' = O + N
これを波動方程式に代入すると一応解決

 

メッシュ最適化と変動UV

ここまで来ると、やはり

【Unite 2017 Tokyo】スマートフォンでどこまでできる?3Dゲームをぐりぐり動かすテクニック講座

が提示したメッシュ最適化も実装してみたい
海のメッシュをカメラと連動する
そうすることで頂点数を変えずにより高品質化できる


実装はそんなに難しくない
ただそうするとUVはメッシュの位置と角度によって違う値になる

解決案として ワールド座標からUV座標を推算する

f:id:sigmalin:20180321125628p:plain

c は波生成範囲の中心点
r は波生成範囲の長さ

a位置のUVは (a-c) / (r*0.5) + 0.5

計算は頂点シェーダーで行う

 

結果

f:id:sigmalin:20180321130159g:plain

 

ここまでの問題点を洗い出す

  •  海には見えない

       波シェーダーを改造して 海に見えるように頑張ります

  • 波生成範囲とキャラサイズのバランスがとれてない 理想の波が生成してない

       いろいろ弄って 試行錯誤しかできない

  • 魚雷撃たせたい

       叶うといいね

 

github.com