はじめに
今回初めての投稿になります!
下記の記事を参考に、ゲームによくある「波」の実装に挑戦するだけの開発日記です!
さっそく実装しながら書いていきます!
頂点を動かすかハイトマップを使うか
どうやら波を表現する方法は2種類あるらしい。
・頂点を頂点・ジオメトリシェーダなどで実際に動かす
・ハイトマップ・法線マップを使って、動いているように見せる
ハイトマップ⇒高さ情報を保持したテクスチャ
とりあえず板ポリ描画
手始めにハイトマップを使ってそれっぽく見せてみようと思う。
が、ハイトマップを法線マップへ変換する作業が必要らしいので
https://cpetry.github.io/NormalMap-Online/
サイト様の力をお借りしてハイトマップを法線マップへ変換
さっそく適用と行きたいところなんですが、ここであまり知らない概念登場
「接空間」
自分なりに調べた結果、法線を基準とした座標空間っていう認識になったんですが
あってるんだろうか。まあ、いったん置いといて
適用&少しそれっぽく動かしてみる
まだ全然波ではないですね
っていうのも、今現在はUV値を変動させているだけなのでちゃっちく見える。
本来は毎フレーム、ハイトマップを作成⇒法線マップに変換
っていうのをしないといけないらしい。
「「大変」」
ここから少々波について勉強+メモ
・波を表現する際に必要な要素
「振幅」波の中心から最低・最高どちらかまでの高さ
「波長」波の最高地点(最低地点)から次の最高地点(最低地点)までの距離
「位相」平行移動
・ゲームで波を表現する場合sin波がとても重要
・現実では波長を1とした時の最大の波の高さはおよそ1/7
波長:最大の波の高さ = 1:0.142...
etc.
いったん今日はここまで
次回はハイトマップを動的に生成するところからやります!
開発環境
IDE:VisualStudio2022
使用言語:c/c++
使用ライブラリ:DirectXTex,DirectXMath etc.