👾

物理計算の予測して確定させるまでの苦悩

2023/06/08に公開

物理計算の予測と確定は難しい

物理計算の予測と確定は、計算するは容易いが、確定後の処理が難しい。

予測は、物理の計算の予測値を出す行為だ。複数の砲弾で放物線を計算するとして、N秒後にどこに砲弾がいるかを数式を用いて計算します。確定は、すべての砲弾のN秒後にどこの座標にあるかが計算されて、地面に当たる、もしくは砲弾同士があたっている、というすると弾自体が破裂したり、跳弾したりする、という状態の事実を確定させます。

予測の計算は現在のコンピュータなら容易いです。乱暴な言い方をするなら、数値を出すだけでいいです。数式の性質をきちんと理解していて、使い方さえわかっていれば使うことができます。

ですが、状態を確定するというのは、一筋縄じゃいきません。物理計算であれば、地面にあったら、地面が非常に硬ければ弾自体が破裂する、入射角が浅ければ跳弾する、といった弾自身の状態と地面の状態が関係が次の弾の状態に関係していきます。

それに、ゲームのような媒体になるとまた話は変わっていきます。当たる対象と当てられる対象ごとに次の瞬間の振る舞いが違うのはざらにあります。アクションゲームでいうと、敵にあたったら自機は死ぬ、地面にあたっているなら右左と移動できると相手の状態に自分の状態が関与します。

予測と確定のフローと概要

予測と確定のフロー

物理判定ありのフローとして、まず予測データを作ります。このデータはN秒後にオブジェクトがどこにいるのかを判定します。砲弾の予測を例に上げると、N秒後に砲弾の座標(x, y, z)の値を計算します。

当たり判定のデータの作成は、予測データからすべてのオブジェクトがどことあたっているかを計算します。砲弾なら、地面にあたっているか、砲弾同士があたっているかを計算します。

確定は、当たり判定のデータからN秒後の状態を確定します。砲弾の場合、砲弾同士があたっていたら爆発する、地面に深い角度で地面にめり込んだら消える(つまり、ないものとして計算される)、地面に浅い角度で地面にめり込んだら跳弾する、と言ったような状態で確定させて画面に表示します。

確定する基準が無数に存在する

この確定が曲者なのは、確定する基準が無数にあるからです。

砲弾を例に上げたのですが、これは私がぱっと思いついた砲弾シュミレーター基準で、リアル指向にするなら本物と同じような計算モデルを適応するし、ファンシーな表現にするなら、地面にあたったら跳ね返る、または別の表現で地面にあたったら花が咲く、という風に千差万別な状態の確定があります。

そのため、前提条件に確定した状態が変わっていくので基準が無数に存在します。

上記のようなフローがおおよそのものではあると思うんですけど、人のやりたいことが無数にあるので、それを表現することが一番難しい。

それに、当たり判定で地面にめり込ませないのであれば、めり込んだ判定を別につけておいて、めり込んだ文を上に押し上げる方法をする必要もあります。特にアクションゲームで必要になって、ジャンプして着地したときにどうても地面にめり込んでしまう場合は上に押し上げる必要があります。

アクションとして必要な動作と、人がやりたいことで分ける動作があるので、そこは加減が難しいところです。ましては、それがエンジニアでない人も使うとなると設計を改めて考える必要があります。

余談: 設計書の大切さ

今回、私は当たり判定付きのゲームをp5.jsで作っているのですが、設計書がないと汎用的な構成にしづらいことがわかりました。

この事自体は自明の理です。おそらく、大半のITに関わるエンジニアなら確実に「設計書は必要だね」といいます。必ずしも必要としない場面は「個人制作で開発の初期段階」、「企業でも初期の初期の実験段階、実験メモに残すのが精一杯」と考えています。

個人制作でも必要と思うのは、一つに設計書があれば考えが整理しやすくなる、が挙げられます。個人制作はかなりコードがカオスになりがちです。その場しのぎのコードも乱立します。それを直そうと思う気持ちもあるが、動かなくなるのが怖い

そこで、落ち着いたときに設計書をかけるようにする、というのはその場しのぎのコードを理解する助けになります。設計書を作っておけば、その場しのぎのコードを理解しやすくなります。そうすれば、バグの解明からリファクタの助けにもなります。

もう一つが新しい設計の手がかりになりすいです。コードがカオスなのはもちろん、数ヶ月前の自分の考えを精密に覚えている人はまずいません。限りなくゼロに近いです。私も当たり判定の部分で全体の最適化を行うときに自分自身に疑問を持つことはあります。

問題点の仕様、設計思想を思い出したときに「設計書があったらもっと論理立てて考えられたのにな〜」と思うことが多々あります。自分自身にも思うのですから、他人はこれの何十倍の苦労があると考えると、計り知れません。

自分のためにも、他人のためにも設計書は必要です。大なり小なり粗さ細かさはあれどないよりかはましです。

Discussion