Happy My Life

日常とか技術とか

ゲームの数学 for UE4 三角関数編

先日紹介したゲームアプリの数学 Unityで学ぶ基礎からシェーダーまででは、様々なゲームに関する数学の解説と、Unity向けのサンプルコードが書かれている。

じゃあ、この本で取り上げている内容がUE4だったらどうなの?という観点からエントリーを書いてみようかと考えている。解説の流れは、先の本の流れで進めて行く予定。ただ、本の内容を引用するつもりもないので、手元に本がなくても理解できるようにするつもり1

三角関数

1章は三角関数の話。三角関数自体は、後に登場する行列などで必要な知識なので、真っ先に知っておくべき関数となる。

三角関数自体の解説は、直角三角形とcos,sin,tanの意味:ビジュアル数学(数学1:三角比・三角関数)あたりを参考にするとよいかと。

BluePrintにも、様々な関数が用意されている。C++などの数学ライブラリと異なる点としては、角度の指定はdegreeとradianのどちらも指定できるようになっている。degreeってのは、0~360度での角度指定、radianってのは0~2πで指定すること。このあたりは学校で習っているはずなので詳しい説明は省略。

radianに慣れないうちは、慣れ親しんだdegreeを使って角度を指定するだろうけど、そのうちradianの方が楽と思えるようになる、はず。ま、どっちでも使えるので好きな方を使えばいいんじゃないかと。

では最初に基本となる正弦波(Sin)から。ASinもある(ASinを使う事で角度を求めることができる)。SinとSindってのがあるけど、最後のdはdegreeの意味。dが無いSinは、radianで指定する。CosもSinと同じ仕様なのでスクリーンショットは省略。

trigonometric1

Tanもこんな感じ。ATanや、ATan2もある。それぞれdegree、radianの両方が指定できる。 trigonometric2

あとは、PIもある(というか無いと困る)。Degree to Radian(D2R)、Radian to Degree(R2D)もあらかじめ用意されているので、自前で用意する必要もない。

trigonometric3

Sinの実用例

例えば、Sinを単体で使う例としては、個人的には波のようにゆらゆらと物体を移動させる処理を連想する。この手の表現は、古より使われてきた手法なので、どこかのゲームで見たことある、という人も多いかと。こういった波ぽい動きは、Sinで簡単に実現できる。

この処理を実現するブループリントは次の通り。

初期化は次の通り。決められた数の球とその配置位置を算出している。

trigonometric_bp1

毎フレームの処理は次の通り。基本となるradianを求めて、あとは、球の位置に合わせて、height * Sin(radian)で高さを求めてゆらゆらと動かしているだけ。

trigonometric_bp2

次は、2章 座標編


  1. 本の売り上げに悪い影響を及ぼすつもりもないので、何か問題があったらコメント等で連絡ください。