■ [XNA][Wonderfl]テオ・ヤンセン機構の3D化
先日のテオ・ヤンセン機構のデモは、もともとはXNAで3Dで動くものを目指して作っていたものだった。
XNA版での2D動作のスクリーンショット。ここまでは順調だった。
上記の2D構造を、何も考えずに手前の足と奥の足のZ値をずらして3D化してみると、
地面にぺしゃんこに潰れてしまった。軸が一つ増えてるので当然か。3D用にちゃんと立体として成立しているデータを作る必要がありそう。
3Dの座標テーブルを手入力するのは大変なので、XSIで作ったデータを読み込めるようにしてみた。が、いろんなパターンを試してみたけどうまくいかない。
たくさんの質点を硬いバネで繋いで固定するような方式で動かしてるんのだけど、ちゃんと体を支えて力が伝えられるように立体構造にしようとすると、どうしてもリンクの接続点が増えてしまう。
点が増えると計算が発散しやすくなって安定せず、立つことはできても歩きはじめると固まってしまったり、ちょっとした衝撃で吹き飛んだりと、なかなか思ったように動いてくれない。
自前の適当な物理計算に限界を感じたので、「JigLibX」というXbox360の実機でも動作する物理エンジンを使ってみることにした。
たくさんの板をヒンジで接続してそれっぽい形を組み上げてみたものの、
これまた自重を支えることさえできないまま、
あっさりと崩壊して弾け飛んでしまった。3Dで沢山の間接をリング状に拘束する計算は上手くやらないと発散しやすいみたい。板の厚さや重さを変えてみたけどうまくいかず。
しかも、この程度の数しか動かしていないのに10~15fpsくらいでしか動作しない。
もっとたくさんの足が繋がった大規模なモデルを出したかったのだけど、XNAで現状のやり方ではこれ以上は難しそう。
・・・というような過程を経て、結局のところあきらめて試作段階の2DのものをWonderflに移植したのが先日のデモだったりする。ここまでにそれなりの時間がかかっていただけに、とても残念な結果に。
フリーのものとはいえ、それなりにちゃんと作られていそうな物理エンジンを使っても簡単には動いてくれなかったのは予想外だった。でもやはり2Dでなく3Dであの構造が動いているところを見てみたいので、機会があればPCのBulletとかPhysXとかでやってみたらどうなるのかも試してみたい。バネの計算のやり方とかも考えないと。今後の検討課題。