資料室へ戻る

3D・空間あそび / AIしくみあそび

Astra✖️blenderで恐竜が動いた!

静止したステゴサウルスを歩かせたら、川幅で進路が変わり、最後は翼竜が風を読んで飛び始めた。

Astra✖️blenderで恐竜が動いた!

9月10日から12日にかけて、Astraとの会話を使いながら、Blenderで恐竜を動かす実験を行った。

最初にいたのは、静止したステゴサウルスである。形はある。背中には背板もある。しかし、立っているだけでは恐竜が生きている感じまでは出ない。(これだけでも信じられないぐらいの進歩なんだが、悲しいことに慣れてしまっている自分がいる)

画像

そこで、歩かせることにした。

Astraとの会話で、寸法データから作ったステゴサウルスの3面設計図と初期モデル

ところが今回の実験は、歩行アニメーションを1本作って終わりにはならなかった。歩ける個体を湿地へ置き、環境によって進む場所を変え、さらに翼竜を飛ばし、風によって飛行経路まで変えるところへ進んでいった。

先に、今回の最初の成果を置いておく。

歩行サイクルだけを見る(6秒・音なし)

最初は、ステゴサウルスを歩かせる

最初の対象はステゴサウルスだった。全長約7mの静止モデルへ骨格を追加し、脚の動きを組んだ。

ここで問題が発生した。

足が地面から浮く。足先の向きが不自然になる。少し前へ進ませるだけでも、脚の曲がる方向が安定しない。

初期レンダーで四肢の接地と尾のスパイクを確認する画面

そこで、脚の先を固定する仕組みを入れ、足裏が地面に残るよう調整した。歩幅は小さく、速度も遅い。派手な走りではないが、まずは「足を置きながら前へ進む」ことを優先した。

この時点で、ステゴサウルスは初めて歩いた。

恐竜が歩く舞台を、毎回つくる

歩けるようになると、灰色の確認画面だけでは足りなくなった。恐竜が歩く場所を用意せねばならない。

そこで、川、浅い水辺、起伏、シダ、トクサ、針葉樹、岩、倒木が入ったジュラ紀の氾濫原を、自動でつくる仕組みを構築した。川幅や水位、地形の粗さ、植物の密度を指定すると、その条件に合わせて別の氾濫原が生成される。

さらに「乱数」という配置用の抽選番号を変えると、同じ川幅でも植物や岩の位置が変わる。恐竜を同じ場所から出発させても、歩く舞台の条件が変わるわけである。

画像

次に、その舞台の中をどう歩くかを組み込んだ。ステゴサウルスには、水辺や急な斜面を避け、岩や倒木を回り込み、生成された植生の中から行き先のシダを選ぶルールを与えた。シダに到着すると、頭を下げて採食する。ここは偶然ではなく、最初から狙って実装した部分である。

面白かったのは、その狙った行動が、生成する舞台の違いときちんとつながったことだ。出発地点と行動ルールをそろえたまま、川幅や配置用の抽選番号だけを変えると、経路だけでなく、選ばれるシダと停止位置まで変わった。

生成した氾濫原で、ステゴサウルスの行動を確認する画面

ステゴサウルスの経路を3パターン(14秒・音なし)

下の比較は、出発地点と行動ルールをそろえて、川幅や配置だけを変えたものだ。あらかじめ決めた線を再生しているのではなく、その条件に合わせて経路と行き先を計算し直している。

もちろん、これは生態系全体のシミュレーションではない。植物を食べる物理も、体全体の衝突判定も入っていない。それでも、環境を変えると行動の結果が変わる。この接続は、静止画と歩行アニメーションの間にあった大きな段差を埋めた。

次に、翼竜を飛ばす

地上を歩く恐竜が動いたので、今度は空を使う恐竜を投入した。

翼竜には、飛行、滑空、着地、地上待機の動きを用意した。翼を広げたときと畳んだときのシルエット、翼の膜が後ろ脚へつながる形、四足で地面を支える姿を先に確認してから、細部を増やした。

画像

着地のモーション確認(14秒・音なし)

翼竜を氾濫原へ入れると、今度は木や岩が問題になった。胴体だけなら通れる隙間でも、翼を広げると枝葉にぶつかる。

そこで、体の中心ではなく、翼の幅を含めた外形で飛行経路を調べた。水面は低いコストで通れる空間、着地点は乾いた緩やかな地面として扱った。

翼竜が氾濫原を飛ぶ(14秒・音なし)

葉の中心だけを障害物として扱っていた初期版では、翼が葉の先端に隠れる事象が発生した。葉の先端まで含めるように判定を広げ、着地直前は羽ばたきから滑空へ切り替えた。

飛ぶ動きにも、地面を歩かせたときと同じ問題があった。見た目だけなら動かせる。しかし、環境とつないだ瞬間に、動きの嘘が見えてくる。

風を入れたら、飛行経路が変わった

ここまで来ると、風を入れたくなる。

弱い風では、翼竜はほぼ一直線に進んだ。横風と上昇気流を入れると、翼竜は上昇気流の場所へ寄り道し、旋回しながら高度を上げた。

風があるときと無いときを並べる(14秒・音なし)

このとき、同じ翼竜、同じ出発地点、同じ目的地でも、風の条件だけで経路が変わった。比較映像に焼き込まれた表示では、Aの高度が7.0m、Bが8.0m。Bでは上昇気流の表示が1.60m/s、滑空率が67%まで上がっている。

ただし、これは本物の空気力学ではない。一定の風向きと人工的な上昇気流を使った、計画飛行の実験である。風を受けて翼が本当に揚力を生むところまでは、まだ到達していない。

風を見えるようにする

風は画面に数字で表示するだけでは分かりにくい。

そこで、実際の環境からシダの葉片を拾い、空気の流れに合わせて飛ばした。胞子のような粒子も加え、水面とシダを少しだけ揺らした。

初回は粒子が多すぎて、金色の雪が降っているようになった。風の存在は伝わるが、翼竜が見えない。密度と明るさを下げ、背景の動きを抑えた。

風を粒子で見えるようにした(14秒・音なし)

これで、風向きの数値を読まなくても、空気が流れていることが見えるようになった。翼竜が上昇気流へ寄り、旋回し、最後に翼を広げて滑空する流れも確認できる。

「恐竜が動いた」の中身

今回、BlenderとAstraで作ったのは、恐竜の動画を数本だけではない。

静止モデルへ骨格を入れ、歩行と飛行を作り、地形と植生を生成し、環境を避ける経路を計算し、風によって飛び方を変え、最後に風そのものを画面へ見せた。

最初のステゴサウルスは、足を地面へ置くだけで苦戦した。それが最後には、川幅の違いで進む場所を変え、翼竜は木を避け、風の中で寄り道をするところまで来た。

一方で、未解決の問題も多い。歩行の筋肉変形は簡略化され、翼は硬く、飛行はベイクした計画である。植物を食べる動作も、体全体の衝突も、まだ本物ではない。

そして、見た目を直したステゴサウルスが、必ずしも恐竜らしく見えるとは限らないことも判明した。

形を作る。動かす。環境へ置く。違和感を見つけて直す。直した結果をもう一度見る。

この往復がある限り、恐竜はまだ動き続けるらしい。次は、歩行をもう少し生き物らしくし、翼の膜と風の関係を詰めねばならない。研究継続。(Dr.よこぼ)