ピンボールの製作について

CINEMA 4DおよびBodyPaint 3Dに関する一般的な議論や情報交換をするフォーラムです。
BUTTON_POST_REPLY
yuu
記事COLON 77
登録日時COLON 2010年6月21日(月) 08:44

ピンボールの製作について

投稿記事 by yuu » 2011年12月21日(水) 11:36

いつもお世話になっています。

現在ピンボールのシーンを製作しています。
傾斜した盤面とそこを転がる球、それを打ち返すフリッパーを製作しました。
転がる玉は、物理計算にて自由に動かすようにして、フリッパーに近づいたら、自動的に打ち返す仕様にしようと、
考えています。
エクスプレッソで、衝突判定を設定して、転がる玉が近づいたらフリッパーが打ち返し、そのあと、元の位置に戻るというノードを
組もうと考えてるのですが、うまくいきません。

助言などありましたら、よろしくお願いします。

tofuji
記事COLON 828
登録日時COLON 2011年3月10日(木) 10:41
お住まいCOLON 東京都渋谷区

Re: ピンボールの製作について

投稿記事 by tofuji » 2011年12月21日(水) 16:07

現在ピンボールのシーンを製作しています。
傾斜した盤面とそこを転がる球、それを打ち返すフリッパーを製作しました。
転がる玉は、物理計算にて自由に動かすようにして、フリッパーに近づいたら、自動的に打ち返す仕様にしようと、
考えています。
 基本的に、CINEMA 4Dの物理シミュレーション機能でピンボールは作れません。理由は「ボールが速すぎるから」です。

 速いボールは、壁がボールとの衝突を認識する前に壁を通り過ぎてしまうので、壁はボールを跳ね返すことができません。
これは、マクロな世界では奇妙に感じられますが、ミクロの世界では実際その通りのことが起こっています。

例えば、原子炉の中で核分裂連鎖反応を起こさせる時、核燃料から放射された高速中性子は、
「速度が速すぎて周囲の核燃料にぶつかることができない」ので、水を使って減速させます。
適度に減速すると、連鎖反応が起こるようになります(原理は、ちょっと、というか結構違うんですけどね)。

 1フレーム当たりの計算回数を増やせば、速いボールでも衝突を正確に判定できるようになりますが、
その分動作が遅くなるので、ゲームとしては成立しません。つまり、「速いボールは扱えない」のです。

 というわけで、ピンボールを作りたいのであれば、それ専用の機能をXPressoとCOFFEEを使って書く必要があります。
それはそんなに難しいことではなく、ピンボール系のゲームは全て独自の機能(簡略化、特殊目的化した物理シミュレーション機能)を使って動いています。
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

yuu
記事COLON 77
登録日時COLON 2010年6月21日(月) 08:44

Re: ピンボールの製作について

投稿記事 by yuu » 2011年12月21日(水) 17:17

助言ありがとうございます。

ゲームとして、成立したいのではなく、ムービーの一シーンとしてピンボールのアニメを作りたいので、動作が重くても問題ありません。

「フリッパーに近づいたら、自動的に打ち返す仕様」を1フレーム当たりの計算回数を増やして考えてみたいと思います。

tofuji
記事COLON 828
登録日時COLON 2011年3月10日(木) 10:41
お住まいCOLON 東京都渋谷区

Re: ピンボールの製作について

投稿記事 by tofuji » 2011年12月21日(水) 17:53

ゲームとして、成立したいのではなく、ムービーの一シーンとしてピンボールのアニメを作りたいので、動作が重くても問題ありません。
 書き忘れていましたが、XPressoが実行される回数は「1フレームに1回」と決められていて、増やすことができません。
これはフレームレートを増やすことである程度解決できますが、CINEMA 4Dのフレームレートは500fps以上に増やすことができません。

 つまり、フリッパー等をXPressoで動かし、その動きを物理シミュレーション機能(衝突判定機能)を介してボールに伝えるのは非常に困難です。

 そうではなく、XPressoを使って「フリッパーとボールの距離を計算し、その結果を元に直接ボールの速度を変える」という方法を取れば、
簡単にピンボールを表現できます。「簡単に」というのは「リアルタイムに」という意味です。
 昔の68kMacでも3Dピンボールゲームは存在したので、おそらく現在のコンピュータを使えば、
CINEMA 4DのXPressoでも十分な精度と速さのピンボールゲームを作れると思います。


 元の投稿を読むと、そのように書いてあるようにも思えるのですが、その部分を書いてしまったら他に物理シミュレーション機能を使う部分はありません。

 盤面上をボールが転がる部分は、物理シミュレーションを使うとボールが暴れたり回転したりするので、盤面に平行な面内を移動するように拘束する必要があります。
これは、機能的には「コネクタ」オブジェクトでできるのですが、(ボールが速すぎて)おそらくまともに動作しないので、やはり自分で書く必要があります。
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

yuu
記事COLON 77
登録日時COLON 2010年6月21日(月) 08:44

Re: ピンボールの製作について

投稿記事 by yuu » 2012年1月01日(日) 21:02

助言ありがとうございます。

>CINEMA 4DのXPressoでも十分な精度と速さのピンボールゲームを作れると思います。

と、ありますが
C4Dの中で、「リアルタイムに」ゲームとして成立することが可能ということは、
キー入力等も、リアルタイムに入力することは可能なのでしょうか?

もし、方法があるのであれば、打ち返すフリッパーを自分でコントロールしてみたいと考えています。

tofuji
記事COLON 828
登録日時COLON 2011年3月10日(木) 10:41
お住まいCOLON 東京都渋谷区

Re: ピンボールの製作について

投稿記事 by tofuji » 2012年1月03日(火) 00:47

>CINEMA 4DのXPressoでも十分な精度と速さのピンボールゲームを作れると思います。

と、ありますが
C4Dの中で、「リアルタイムに」ゲームとして成立することが可能ということは、
キー入力等も、リアルタイムに入力することは可能なのでしょうか?
 難しい問題ですね。要点を分けて書きます。

1. 私が10年前にThinkingParticlesでブロック崩しを作った時、
入力はマウスで普通にパッドを動かすだけだったので、何の問題もなく1日で完成しました。


2. その後コンピュータは劇的に速くなっているので、少なくともピンボールのボールの運動や衝突等の計算はXPressoで十分処理できるはずです。


3. ところが、キーボードを使ってフリッパーをコントロールしようとすると、途端に難しくなります。
理由は、キーの「長押し」とか「同時押し」が発生するからです。
少なくとも、CINEMA 4DのXPresso、COFFEEやPythonにはそういう使い方をするための関数がありません。

 キーを押すとまずイベントが一回発生し、さらにOSの環境設定で「キーのリピート」が指定されている場合は、指定した間隔でイベントが発生します。
それがOSの決めた「キーボードの標準的な使い方」だからです。

 また、特殊キー以外のキーを同時押ししても、後から押したキーは無視されます。これも、「それが標準的な使い方」だからです。


4. この問題を解決するには、OSにアクセスできる「プラグイン」を書く必要があります。
OSには「標準的でない使い方」をするための関数がたくさん用意されています。

 しかし、自分でプラグインを書かなくても、外部入力機器(ジョイスティックやMIDI機器等)をCINEMA 4Dにつなぐためのプラグインが昔から存在するので、
適当に流用すればいいと思います。


 というわけで結論は、「そのままキーボードを使うのは無理だが、プラグインを利用すれば外部入力機器が使える」ということになります。
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

tofuji
記事COLON 828
登録日時COLON 2011年3月10日(木) 10:41
お住まいCOLON 東京都渋谷区

Re: ピンボールの製作について

投稿記事 by tofuji » 2012年1月03日(火) 11:27

 簡単な実験をしたので説明します。

http://www2.11moon.com/sample_files2012 ... lipper.mp4

http://www2.11moon.com/sample_files2012 ... lipper.zip


1. 外部機器接続用には、「Control4D」というプラグインを使いました。

http://www.kvbarnum.com/Control4D.html

 $40のシェアウエアですが、機能を限定した無償版もあります。


2. コントローラには、「HORIPAD3 PRO」というPlaystation3用のゲームパッドを使いました。

http://www.hori.jp/items/detail.php?id=1005

 ヨドバシカメラで2000円で売ってました。Control4DはUSB-HIDデバイス用のプラグインですが、
大体PS3やX-BOX用のゲームパッドは使えるようです。それに対して、Wii用のゲームパッドは使えない場合が多いようです。
ドライバーは、OS標準のUSB-HIDをそのまま使っています。OSはMacOSX 10.7.2です。


3. 評価

 簡単に動かせます。また当然ですが、ボタンの「長押し」とか「同時押し」にもきちんと対応できます。
理由は、「それがゲームパッドの標準的な使い方」だからです。
 ちなみに「連射ボタン」を押せば、キーボードと同じように多数のコマンドが連続して出てきます。

 問題なのは、2〜3フレームの遅延が発生することです。しかし、これはデジタル化が進んだ現在ではどうしようもないことだと思います。
1970年代のアナログテニスゲームとかは、走査線の速度以上の遅延はなかったですから。
 USBも、パケットは大きくなったものの数が変っていないので、たくさんつなぐと目に見えて遅くなります。

 でもまあ、気分転換にはこういうのを作るのも面白いと思いますよ。
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

yuu
記事COLON 77
登録日時COLON 2010年6月21日(月) 08:44

Re: ピンボールの製作について

投稿記事 by yuu » 2012年1月03日(火) 15:44

詳しく、説明ありがとうございます。

プラグインのフリー版をインストールしまして、サンプルを起動させてみました。
問題なくゲームパッドで操作が出来て非常に可能性を感じました。

個人で楽しむ簡単な3Dゲームを作るには、最適です。
c4dを触ってみてゲームが作れるのではないかと予感としてはあったのですが、実際に作れるようなので、ソフトの見方が少しかわりました。

ただ、作ったゲームを遊んでもらうためにc4dとプラグインが必要なので配布するのはむずかしいかなとも思いました。

tofuji
記事COLON 828
登録日時COLON 2011年3月10日(木) 10:41
お住まいCOLON 東京都渋谷区

Re: ピンボールの製作について

投稿記事 by tofuji » 2012年1月15日(日) 18:28

 おまけで簡単なゲームを作りました。

http://www2.11moon.com/sample_files2012 ... /buggy.zip

R16用
http://www2.11moon.com/sample_files2014 ... gy_R16.zip


 30秒以内に赤いコーンを倒せたら勝ちです。

 PlayStation3用のゲームパッドだと、右アナログスイッチの左右がステアリング、左アナログスイッチの前後がアクセルになっています。ブレーキはありません。逆進で止めて下さい。

 
---

Toshio Fuji<gtofuji@gmail.com>

掲示板に書いたサンプルのまとめサイト
http://www2.11moon.com/index_as.html

BUTTON_POST_REPLY