2015-01-25 Sun [ ゲーム作りライフ ]
今では物理エンジンはunityやUEといった統合型ゲームエンジンが普及したおかげで使うのがとても簡単になったのだけど、これでカーレースのようなゲームを作ると、正しく動く車を作るのは実は超大変だって話をちょっと書いてみたい。
話は2007年に戻る。
2007年にメディアワークスを辞めるあたりで、韓国でPS2のゲームを作っている会社とつながりが出来、そこでカーレースを作ったのだけど、これが全オリジナルの物理エンジン+3Dエンジンのゲームだった。
で、これを作る時に、いろいろとんでもない目に会ったおかげで、物理エンジンは万能ではないし、問題だらけだって知ったわけだ。
さて。
物理を使うゲームの作り方はいろいろあるのだけど、全部がいわゆる剛体物理で動き、フェイクはひとつもない、すなわちあらゆるものはフォースで動いているとする。そして物理エンジン内部のエミュレーションのΔTはフレームレート、すなわち1/60秒と一致している、としておく。
これを読んで眉を潜めるひとは既にプロで物理エンジンに悩まされたことがあるのは賭けてもいい。
ちなみにPS2時代の物理エンジンはこれでアップアップだったので、実際にこうだった。
これの何が問題なのか?
実は1/60秒は時間的な分解能が圧倒的に足りないってことだ。
どういうことなのか?
ここでスゴくわかりやすく単純に秒速60メートルで走っている車を想定しよう。
秒速60メートルなので、60*60*60=216000メートル/時間になり、時速216キロメートル。
F1なんかより全然遅い。ふつーにある車だ。少なくともカーレースで驚く速度ではない。
ではこの車は1フレーム(つまり1/60秒=ビデオゲームの鉄の掟16.7msec)ごとにどんだけ動くのか?
もちろん答えは1メートルだ。
ここでちょっとした思考実験をしてみよう。
幅99センチの壁に長さ0の車がぶつかろうとしているとする。次のフレーム(つまり1/60秒後)はどうなっているのか?
長さ0なので、なんと壁をすり抜けてしまう。まるで超能力だ。
これはもちろん極端な例なのだけど、この問題の変形版が本当にイロイロなところで起こる。
1メートル程度の幅の溝は車の走っているタイミングによっては、タイヤが上に乗らないので、あたかもないものになったり、逆でピッタリとタイヤが入れば、次のフレームでは落ちるしと、毎回走るたびに動きが違う、奇っ怪極まりない挙動を起こす。
1メートルで10センチ上がる坂に運悪く突っ込むと、突然タイヤが10センチ地面にめりこんだことになる。
そして、物理エンジンでは地面などにめり込んだと判定すると、めり込んだタイミングを計算してめり込んだ分だけの力を逆方向にかけて、位置を移動させるのが普通の処理なので、とても跳ねそうにもない道で突然車がジャンプすることになる。
こんなキッカイな挙動が山のように起こるのが物理エンジンカーレースの世界だ。
これがどうして起こるのかというと、1/60だと1メートル以上も動いてしまうからで、シミュレーションとしてみると、計算が粗すぎるわけだ。
つまり秒60回では全く計算が足りないことになる。
では、どれぐらいなら足りるのか?
もちろんデスマッチの世界なわけだけど「これなら足りる」といえるのは、多分1物理エンジン時間で10センチ以下の分解能が保証できたら、まあなんとかなる気がする。
車が仮に秒速100メートル、つまり時速360キロなら10センチは10000/10=1000物理演算/秒。
このあたりになれば、まあおかしな動きはしなくなるだろうが…物理エンジンがシミュレーション全体で、この速度で動くようになるには、まだあとゲームマシンの2世代分ぐらいはかかりそうな気がする。
そして、そこに至るまで、ゲームデザイナーもプログラマも物理エンジンのキカイな挙動に悩まされるのだろう。
個人的には物理エンジンは、破片が散らばるとか、コインが散らばるとか、ラグドールとかだけに限っておきたいなあと思うのだった。
話は2007年に戻る。
2007年にメディアワークスを辞めるあたりで、韓国でPS2のゲームを作っている会社とつながりが出来、そこでカーレースを作ったのだけど、これが全オリジナルの物理エンジン+3Dエンジンのゲームだった。
で、これを作る時に、いろいろとんでもない目に会ったおかげで、物理エンジンは万能ではないし、問題だらけだって知ったわけだ。
この物理エンジンを作ったヤツはRok Erjavec。
レンダリングエンジンも作り、さらにスクリプトエンジンも設計し…となんでも出来るオバケみたいに優秀なヤツで、そのあとUBIに入って、シンガポールに引っ越して、PC版のGhost Reconシリーズの3Dエンジンのディレクターになった。
あまりに優秀だったもんで、ゲームロフトのデザインディレクターをやってたとき、引き抜こうとしたらUBIとゲームロフトは兄弟会社みたいなもんだから、ダメだよって言われてガッカリ。
そのあと彼はCrytekに移り、現在テクニカルディレクターをやっている。
ホント優秀なんで、チャンスがあったらもう一度仕事をしてみたい人間の一人だ。
レンダリングエンジンも作り、さらにスクリプトエンジンも設計し…となんでも出来るオバケみたいに優秀なヤツで、そのあとUBIに入って、シンガポールに引っ越して、PC版のGhost Reconシリーズの3Dエンジンのディレクターになった。
あまりに優秀だったもんで、ゲームロフトのデザインディレクターをやってたとき、引き抜こうとしたらUBIとゲームロフトは兄弟会社みたいなもんだから、ダメだよって言われてガッカリ。
そのあと彼はCrytekに移り、現在テクニカルディレクターをやっている。
ホント優秀なんで、チャンスがあったらもう一度仕事をしてみたい人間の一人だ。
さて。
物理を使うゲームの作り方はいろいろあるのだけど、全部がいわゆる剛体物理で動き、フェイクはひとつもない、すなわちあらゆるものはフォースで動いているとする。そして物理エンジン内部のエミュレーションのΔTはフレームレート、すなわち1/60秒と一致している、としておく。
これを読んで眉を潜めるひとは既にプロで物理エンジンに悩まされたことがあるのは賭けてもいい。
ちなみにPS2時代の物理エンジンはこれでアップアップだったので、実際にこうだった。
これの何が問題なのか?
実は1/60秒は時間的な分解能が圧倒的に足りないってことだ。
どういうことなのか?
ここでスゴくわかりやすく単純に秒速60メートルで走っている車を想定しよう。
秒速60メートルなので、60*60*60=216000メートル/時間になり、時速216キロメートル。
F1なんかより全然遅い。ふつーにある車だ。少なくともカーレースで驚く速度ではない。
ではこの車は1フレーム(つまり1/60秒=ビデオゲームの鉄の掟16.7msec)ごとにどんだけ動くのか?
もちろん答えは1メートルだ。
ここでちょっとした思考実験をしてみよう。
幅99センチの壁に長さ0の車がぶつかろうとしているとする。次のフレーム(つまり1/60秒後)はどうなっているのか?
長さ0なので、なんと壁をすり抜けてしまう。まるで超能力だ。
これはもちろん極端な例なのだけど、この問題の変形版が本当にイロイロなところで起こる。
1メートル程度の幅の溝は車の走っているタイミングによっては、タイヤが上に乗らないので、あたかもないものになったり、逆でピッタリとタイヤが入れば、次のフレームでは落ちるしと、毎回走るたびに動きが違う、奇っ怪極まりない挙動を起こす。
1メートルで10センチ上がる坂に運悪く突っ込むと、突然タイヤが10センチ地面にめりこんだことになる。
そして、物理エンジンでは地面などにめり込んだと判定すると、めり込んだタイミングを計算してめり込んだ分だけの力を逆方向にかけて、位置を移動させるのが普通の処理なので、とても跳ねそうにもない道で突然車がジャンプすることになる。
こんなキッカイな挙動が山のように起こるのが物理エンジンカーレースの世界だ。
これがどうして起こるのかというと、1/60だと1メートル以上も動いてしまうからで、シミュレーションとしてみると、計算が粗すぎるわけだ。
つまり秒60回では全く計算が足りないことになる。
では、どれぐらいなら足りるのか?
もちろんデスマッチの世界なわけだけど「これなら足りる」といえるのは、多分1物理エンジン時間で10センチ以下の分解能が保証できたら、まあなんとかなる気がする。
車が仮に秒速100メートル、つまり時速360キロなら10センチは10000/10=1000物理演算/秒。
このあたりになれば、まあおかしな動きはしなくなるだろうが…物理エンジンがシミュレーション全体で、この速度で動くようになるには、まだあとゲームマシンの2世代分ぐらいはかかりそうな気がする。
そして、そこに至るまで、ゲームデザイナーもプログラマも物理エンジンのキカイな挙動に悩まされるのだろう。
個人的には物理エンジンは、破片が散らばるとか、コインが散らばるとか、ラグドールとかだけに限っておきたいなあと思うのだった。
コメント
この記事に書いてある360で回しているのは「ゲームに影響が大きい物理」なんで、あとさき考えず全部シミュレーションしてるわけじゃないんですよ。
そーいう意味で、制約をかければ現行機でも多分イケると思いますが、それはそれで問題がイロイロあるんですね。困ったことに。
そーいう意味で、制約をかければ現行機でも多分イケると思いますが、それはそれで問題がイロイロあるんですね。困ったことに。
| 岩崎 | EMAIL | URL | 15/01/27 08:33 | QEuNFotw |
Xboxの看板タイトルであるForza MotorsportシリーズはXbox 360で物理シミュレーション360fpsを実現しています。
現行世代では10cm未満のシミュレートも可能かもしれませんね。
http://game.watch.impress.co.jp/docs/series/3dcg/20090930_318385.html
現行世代では10cm未満のシミュレートも可能かもしれませんね。
http://game.watch.impress.co.jp/docs/series/3dcg/20090930_318385.html
| アクションゲーム好き | EMAIL | URL | 15/01/27 00:32 | caWPXpZg |
この記事のトラックバックURL :
トラックバック