橋本 麦∿Baku Hashimoto

ステートマシン・アニメーション

追記 21/05/04 Nishikiさんのご指摘で、一部のゲームエンジンではステートマシン・アニメーションという呼称があると教わったので、技法名を改題。

もちが縦横無尽に跳ねるWebサイトをつくるにあたって、グラフを使ってもち達の動き方を生成する話というを書いたのですが、実はこのもちアニメーション自体もまたグラフ状の時間軸、いわゆるステートマシン図(状態遷移)のような構造をしたタイムラインを持っています。いきなりそんな言われても…って感じですが。個人的にまだこの手法掘れるなと感じたので、Hackintoshのセットアップがてら書き残しておきます。


Web系の方はひと目見たら分かると思いますが、このもちは、もちの動き方の全パターンをタイル状に配置した動画素材(スプライトといいます)をうまい具合に切り抜き・配置・再生することで動かしています。頭の悪い方法ですが、映像畑のプリレンダ―脳にはやさしいやり方です。もちろん、個々のもちの動きはその場で生成しています 。

※補足までに、スプライトはHoudini、Redshift、After Effectsで作りました。左半分にカラー、右半分はチャンネルの Rにもちのマスク、 G = 影、B = GI(照り返し)を割り当て、シェーダでもちをタイル状に配置するのと同時にPhotoshopみたくレイヤー合成しています。

上下左右の4方向からやって来て、同じく4方向へと跳んでいくので 4 × 4 = 16 パターンを用意しました。注意したいのは、このスプライトはもち視点で「マスからマスへと動いていく」過程ではなく、マス視点で「もちがやって来て、去っていく」までの素材だということです。だからループのつなぎ目は、もちが次のマスへと動くその中間地点にあたります。マスの中央でピタリと静止したところをつなぎ目にすれば必要なパターン数も少なくできるので楽なんですが、なにせおもちは柔らかいので、向きを変えるにもモニュンとしてくれたほうが嬉しいですよね。

ここで、もちの経路に名前をつけます。

例えば、上からやって来て右へとはけていくのは U-R’ と表せます。このように、あるマスは「もちがいずれかの方向からやって来るところ」という4状態から、「いずれかの方向へと去っていくところ」という4状態への変化を繰り返しています。こんな仕組みを賢く書き表せるのがステートマシン図(状態遷移図)です。

矢印を数えるとちょうど16本です。この矢印上を今回の場合、2秒・60フレームかけて遷移していきます。つまり、このもち動画素材のタイムラインは、普通のアニメーションのように一直線のものではなく、いくつもの「状態」同士をつなぐグラフ構造をしていることになります。

ちなみに、○ から ○’ へと変化した(やって来たもちを押し出した)後は、自分の方を指し示す隣のマスを探せば次の状態がわかります。

「上にD’がいればUに」といった遷移のルール

そして、もちがぶつからず動けるパターンをここで紹介した方法で再計算し、その方向へと再びもちを押し出すということを繰り返します。だからこの仕組みはある種のセル・オートマトンとして捉えることが出来ます。面白くないですか?


こういう、タイムラインがステートマシン図のような構造をとったアニメーションを、さしあたり「ステートマシン・アニメーション」と呼んでみることにしました。ゲーム開発ツールでは実際そうした名前の機能があるようです。無意識でしたが、group_inouのフリーダウンロードシングルuri gagarnのアルバムのサイトを作ったときにもこの手法を試しています。

フリーダウンロードなので、現実には無いCDを自作してコマ撮りしました。クローズした今は輪ゴムをかけてます
紙ジャケを見せたかったのでこれもコマ撮り

ちなみにuri gagarnの方のステートマシン図はこのような感じです。

そういえば、学生時代に芸祭フィナーレでやった(今見るとクソおもんない)プロジェクションマッピングの本編までのカウントダウン映像も、友達に描いてもらった数字をステートマシン・アニメ―ションさせていました。多分この手法好きなんですね…。

図書館の壁面に薄っすいプロジェクションをしたのが懐かしい

最近、和田淳さんの「マイエクササイズ」や、セールで1200円だったので買った「フィンチ家の奇妙な屋敷でおきたこと」をプレイしていて思ったんですが、ゲームを無理やり映像作品として捉えるとならば、ステートマシン・アニメーションの一種といえます。おもちのサイトはゲームではないにせよ、せいぜい8種類の状態に16種類の遷移しか扱わなかったので全てをムービーとして予め用意する出来ました。しかしほとんどのゲームは、画面として表示され得る状態やそこからのインタラクションによる遷移は天文学的数に及ぶので、データ量の現実性からその場でレンダリングする手法をとっていると考えることもできます。(ちなみに小さい頃、ヨッシーストーリーのカートリッジには全通りのスクリーンショットが入ってると思ってました)

一方、ゲームのチェックポイントなど、ステートマシン図の一部が一本の矢印に「くびれた」箇所(= 全プレイヤーがかならず通過する遷移)ではムービーが流れたりします。プリレンダ―のものもありますよね。これが過剰になるといわゆるムービーゲーになります。ノベルゲームなんかも、そこまで状態遷移の種類が複雑ではないのでボイスが付いたりします。

Netflixの「ブラック・ミラー : バンダースナッチ」も実写版ステートマシン・アニメーションとして考えられます。こんな複雑なグラフ、よく撮ったなぁ…。

FULL BANDERSNATCH FLOWCHART  – Reddit

現状、主要な映像ソフトはステートマシン・アニメーションには対応していせん。(UI/UXプロトタイプツールには近い考え方の機能があります)この先もしそういう機能が実現されたら、映像とインタラクティブは更に溶けていくんじゃないかと、ふと思いました。Glispに実装したいなぁー。