読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

物理演算は全く同じパラメータでも毎回違う結果になる

サンプルデータ 3Dゲーム UE4.10

f:id:una_unagi:20160331221652g:plain

「昨日のサイコロのやつがどうにも気になって仕方がないので、改造してた」

妹「サイコロ投げるようにしたの?」

「サイコロにProjectileMovementを追加して、サイコロをスポーンして弾みたいに発射してる。サイコロは大きく表示したかったから、升的なものを小さく、カメラを寄せた。それとサイコロの目がどうだったか毎回記録をとって、サイコロをどんどん自動で投げ込む仕組みになっている。これでサイコロの偏りがわかる。画面上の表示の、左端が斜めで止まった数で、その右が1の目から6の目までの回数」

妹「やっぱりだいぶ偏ってるね」

「ただ今回のケースで言うと、偏るというか、全く一緒でもいいはずなんだよ。だって毎回同じ向きのサイコロを、同じ位置、同じ角度、同じ速度で投げ込んでるんだからさ。壁に当たるまでは全く同じ軌道なんだけど、そこから先がずれる。同じ目でも最後に止まる位置は違うから、細かい動きは全部違う動きになってる」

妹「サイコロなんてそんなものでは」

「サイコロはそうなんだけど、コンピューターの場合は同じ手順で同じ結果を出すが普通だから。物理エンジンの中でランダム処理をしてるのか、小数の誤差的な話なのか、そのへんよくわかってないけど。とにかく狙って同じ目を出すのは難しそうだった。真上からまっすぐ落とすとか、壁にサイコロの角を当てないとか、ブレが少なくなる方法も一応あるんだけど、それだと見栄えが悪い」

妹「でもこんなに偏るんじゃサイコロとしては使えないね」

「最初のサイコロの角度をランダムで変化させると、トータルで見ると偏りがなくなるんじゃないかと思う。投げ込む位置でも偏り方は変わるけど、それだとまんべんなく偏らせるというのは難しい。あとたまにサイコロが床をゆっくりすべって、ピタッと止まってくれないことがあった。これも止まるまで待つ時間が無駄だから、投げて一定時間経ったら強制的に出目判定に移行する仕組みも必要」