トレンド&テクノロジー / サイエンスCG最前線!
第5回:心臓シミュレーションを可視化する(後編)
- Maya
- コラム
- 中級者
- 建築・製造・広告
断面を作る
今回、技術的に(ソフトウェアの仕様云々ではなく純粋に技術的に)最も難しく、且つ技術者的に最も燃え上がった部分が、心臓の断面モデルを作る部分でした。今回のCG映像の中に、さりげなく何度も心臓の断面が出てきますが、実はこれが結構大変でした。
そもそもMayaに限らずポリゴンモデルが主流のエンタメCG業界では断面を扱うのはとても苦手です。理由は簡単で、ポリゴンモデルは物体の表面をポリゴンメッシュで敷き詰めたモデルなので「中身」が全くありません。なので、ポリゴンモデルを切断すると、中身はスカスカです。
「ブーリアンで差分取れば良いじゃん!」
と思われるかもしれませんが、これがまた一癖あって、シミュレーションの仕様上、non manifold faceやlamina faceが存在するのでブーリアンが上手くいきません。手作業でclean upしてしまうと、頂点に紐付いたデータがバラバラになってしまって作業出来ません。試しにclean upもやってみましたが、ブーリアンは重すぎてお話しになりませんでした。
また、例えブーリアンが上手くいったとしても断面における頂点カラーの情報が何もないので、全く以て正確でない絵になってしまいます。
冒頭でご紹介したとおり、この心臓CGは、細かい四面体が集まって出来ています。
と、言うことは、四面体単位で断面を作れば良いのではないか!と思って作ってみた(正確には冒頭の小田さんに作って頂いた)のがこちらです。
四面体は結構細かいのでいけるかもと思ったのですが…。これでは流石に作品レベルとしてまずいですね…。スムースかけたら良いかも!と思って試してみた結果がこちら。
…気持ち悪いですね。やっぱりダメでした。
と、流石に諦めかけたのですが、ここで先輩の小田さんに言われました。
「いやいや、こういうのをちゃんとコード書いてこそプログラマーでしょ。」
そうだ、そうでした、私は中学時代にパソコン部で曲がりなりにも部長をやっていたのだ。中学生のときにレイトレーシングもポリゴンモデリングもボリュームレンダリングも一応は本を見ながらCとMASMでコード書いたではないか!
と言うことで、先輩の小田さんと一緒に断面プログラムを書きました(やはり核となる部分は小田さんがほぼ全て書いて下さり、私はいくつかのバグ取りとデータを掃き出す部分を担当しました)。シミュレーションデータに適したブーリアン演算を完全オリジナルで書いたわけですが、久々にプログラミングの楽しさを思い出しました。
その結果がこちら。
はじめてこの動きを見たときは感動的でした。断面の頂点数を変えることなく断面が動いてくれることで、フレーム毎のトポロジーを保ったままにすることが出来ます。断面を固定してしまうと、フレーム毎に頂点数が変わってMaya内での制御が大変なことになります。おそらく1フレームずつ表示させるオブジェクトを変える…と言った芸当が必要になると思いますが、そうなると頂点カラーの制御がもっと大変になり…考えたくありません。
ですが、こうして頂点アニメーションのみで断面を生成することで、1つのオブジェクトとして扱うことが出来ます。このあたりも、CGの特性を知っていないと気付きにくい落とし穴ではないでしょうか。
もちろんMayaもフル活用
数値データの扱い、と言う意味では色々と制限も多いMayaですが、とは言えMayaの扱いやすいUIはとても役立ちました。例えば、冒頭で出てきた小さすぎる心臓。
ビューポート上で色々と動かして、以下のようにしたのですが、
よくよく考えたら、数値データそのものが最初からこうなっているのが一番良いですよね。と言うわけで、Maya上で値を見つつ、それぞれ対応する行列式に入れてやってオリジナルデータをいじってやれば良いだけです。
簡単ですね。ちなみに行列演算はNumPyを使って高速化を図ったわけですが、NumPyはMaya 2013以上ではちょっと(かなり)使うのが面倒ですのでご注意下さい。これについては、Digital FrontierさんのDF Talkでも書かれておりますので参考になさってください。
GUIでサクサク3DCGモデルを動かせたり、値を取り出せるところはやはり完成された3DCGソフトウェアの強みですね。
そんなこんなで、様々な制約や仕様をどうにか切り抜けつつ、シーンのセットアップを行っていきました。
…と、実はここまで永遠と技術的な話しかしてませんね。そうです、これでやっと技術面が一段落しました。
で、映像として仕上げる。
実際には、上記の技術面を検証しながらストーリーを作り上げていきました。嬉しいことに、UT-Heartの研究をされている先生方が普段お使いになっている解説用の資料がとてもわかりやすく、その資料をもとにストーリーや場面展開を考えていくことができました。ストーリーを考えつつ、技術的に表現可能かどうかを調べつつ、の作業を行ったり来たりしました。「研究者用の可視化ソフトウェアでは簡単、でもMayaでは難しい。」と言う事態だけは避けなければいけませんでした。振り返ってみればこれが最も大変だったのですが。頂点カラーアニメーション、値による色付け、断面生成…。
わざわざ映像のプロに依頼して下さっているのに、研究者の先生方が普段当たり前に出来ていることが出来ないのでは話になりません。正直私も、3DCGソフトウェアでの再現がここまで大変だとは思っておりませんでした。
この心臓シミュレーションが有限要素法によって出来ていることを最初に持ってくることは、映像の流れを考えた際にほぼ必然でした。本当はその後すぐに、それぞれの四面体の動きがアクチン・ミオシンのシミュレーションによって計算されていることを話すと解説しやすいのですが、そうしてしまうと一般の方が知っている「心臓」とはかけ離れた世界になってしまい、途中で見るのを辞めてしまうだろうと思いましたので、この部分は映像の後半に持っていき、映像の前半では出来るだけ心臓の形がわかるようにしました。
途中、心臓の中にカメラが入って血液の流れの視点になる箇所がありますが、これは私なりの遊び心です。研究者の先生方がこのカメラワークで心臓CGを動かすことはまず絶対無く、血液の流れ方をわかっていないとこのカメラワークは出来ず、且つこれくらいのことをして初めて映像のプロが行う意味、付加価値が出てくると考えました。大画面で見ると迫力も相当あります。立体視用に作れば、かなりの没入感も得られるのではないかと思っています。
私自身が短い期間ではありますが、一応医学を習ってきた立場として、立体的に見てみたかったことも映像に盛り込みました。右心系、左心系、そして、心臓の4つの部屋である右心房、右心室、左心房、左心室の立体的な位置関係です。
これらはいずれも心臓の外側から見ても明確には区別出来ず、立体的な位置関係、どう捻れているのかなどが良く分かりません。CTや心エコーなどで、ある特定の断面を見て「ここが左心室、ここが左心房。」みたいな判断は出来ますが、では全体としてはどうなっているの?と言われると、きちんと立体的に理解出来ている人は意外と少ないのではないかと思います。
でも3DCGなら、「動いている空間」を取り出すと言う手法を用いることで、3DCGを用いなければ絶対に表現出来ないことを実現することが出来ます。位置関係も一目瞭然です。
と、言う狙いがあり、映像の前半で心臓の内部構造、つまりは「空間」のみを取り出して、且つ、一旦右心系と左心系とをバラバラに分解して説明をし、その後で心臓の4つの部屋と、部屋に繋がっている大血管とを説明しました。
今回の映像では、映像内のナレーションでは解説しないけれども、見る人が見ればさらに細かい内容が伝わるような仕掛けもいくつか入れています。
例えば、エネルギー消費量を断面がよく見えるカメラアングルで見せたのには理由があります。断面を良く見ると、心臓の外側と内側とでは、心臓が収縮するときにだいぶエネルギー消費量が異なることがわかります。気付けばこれだけでも面白い現象です。
…と、言うようなことを考えながらナレーション原稿を作り、5分前後で収まるように文量をとにかくギリギリまで削ぎ落とし、同時に場面進行とナレーションとのタイミングがずれないようにカメラの動きや言葉の速さなどを調整しながらビデオコンテを作りました。
説明用映像の場合、説明のためのナレーションと映像はどちらも同じくらい大切であるため、名映像だけ先に作っておいて、それに合わせてナレーションを考えると、ナレーションが全く尺に収まらなかったり、逆に余りすぎてしまったりと、とても難しい事態に陥ります。
実写と違って余計にレンダリングするわけにもいかず、また、演出としてあまり場面が変わらないようにしましたので、ナレーションとビデオコンテとを同時に作ることがポイントの1つになると思います。
完成まであともう少し!
音楽・効果音を付ける
日本で作られている説明用の映像って、なんでいつもイントロの音楽→一度音楽が終わる→チャリラリーンみたいな効果音と共に「第一章 ○○」みたいな文字が、緑色+黒縁取りの大きなゴシック体とかで出る、みたいな流れなのでしょうね。あれ、もの凄くつまらないと思うのですが、説明用映像のしきたりみたいなものがあるのでしょうか。今回の映像は説明が第一の目的ではあるのですが、同時に1つの映像作品として楽しいものを作りたかったので、章立てを行ったり、見にくいタイトル表示を行ったりはしませんでした。
どうすれば、説明用映像なのにあっと言う間に5分間見てしまった、と言う作品に出来るか。
とても重要なのが音楽、そして効果音です。ありものの音楽を継ぎ接ぎで繋げても、視聴者に訴える作品は出来ません。素晴らしい音楽は、映像作品において映像そのものと同じくらい、場合によっては映像以上に大切な要素です。Discovery Channelあたりの科学番組では、オーケストラによる格好良い音楽が終始流れっぱなしですよね。映像はそれほど大したことがないけれども、音楽が素晴らしいが故に見入ってしまう映像、と言うのも少なからず存在するように思います。
プログラムでは中学・高校の先輩の小田さんにお世話になりましたが、音楽・効果音でも中学・高校の先輩にお世話になりました。
森下唯さん。ピアニート公爵としても活躍されている、とにかくピアノの腕前が素晴らし過ぎる先輩です。
ピアノの名手でもあるのですが、同時に作曲・編曲の名手でもあり、これまでも森下さんに作曲して頂いたことがあるのですが、今回もまた森下さんに作曲をお願いしました。
これがもう凄すぎて、まだビデオコンテと一部のサンプルカットしか無い状況で、映像の世界観に完璧に合う曲を作って下さいました。且つ、映像で画面が切り替わるところや解説が一段落したところに合わせて緩急付けた展開を作って下さり、映画音楽制作と同じような雰囲気でした。
最終的な音楽以外にも、サンプルとしてもう何パターンかラフに作って下さったのですが、採用されなかった音楽もどれも本当に素敵でした。
音楽の盛り上がりの邪魔にならないように、ナレーションのタイミングを少しずらすなどの調整も最後までねばり強く行いました。
これだけでも素晴らしかったのですが、さらに効果音が加わることで、より臨場感が増し、「映像作品」としての完成度を高めることが出来ました。
結局は、題材が「サイエンス」なだけ。
長々とたくさんのことを書きましたが、実は題材が「サイエンス」なだけで、やっていることは一般的な3DCG映像制作と何らかわりありません。内容を理解し、吟味し、ストーリーを作り、技術的に難しいところがあれば解決し、シーンのセットアップをし、細部まで作り込む、ただそれだけです。
題材が「サイエンス」、今回の場合は「心臓シミュレーション」という、一見取っつきにくそうなものではありましたが、そして確かにそれなりに専門知識が必要ですし、私自身も今回改めて勉強することがたくさんありましたが、でも1つずつ丁寧に紐解いていけば何も特殊なことは行っていません。
1つだけ違いがあるとすれば、一緒に制作するメンバー全員が、内容をきちんと勉強しようとしてくれるかどうかです。制作に携わる人間が、「何か難しそうだから勉強したくないな…」と感じてしまうようですと、良い作品には絶対になりません。内容を理解していない人が作ったコンテンツで視聴者に理解してもらおうなんて出来るわけがありません。
一般的なエンターテイメント用の3DCG映像制作において、ちょっとしたものを作るにも「全体的な世界観ってどんなだっけ?」とか「このキャラクターってどんな性格だったっけ?」とか少なくとも頭の片隅には入れておくかと思いますが、それと全く同じことなのです。
今回の作品を作って一番嬉しかったこと
先日、子どもたちがたくさん集まるイベントでお話しさせて頂く機会があり、子どもにはまだちょっと早いかなと思いつつ、この映像を流してみました。すると、イベント終了後にまだ小学校低学年くらいの女の子が私のところにやってきてこう言いました。
「わたしは心臓にちょっと穴が空いているって言われているのですが、さっきの映像をみてどの部分なのかとってもよくわかりました。ありがとうございます!」
立て続けに、隣にいたその子のお母さんからも
「いつも子どもに説明するのが大変で、今日も心臓の4つの部屋を絵で描いたりして説明しようと試みたのですが、これだったら子どもにとても説明しやすいです。」
と仰って頂きました。これはもう本当に嬉しかった瞬間です。
きちんとした3DCG映像を作ることで、子どもが自分の病気を理解することが出来、説明に悩む御家族の手助けにもなる。このような分野にこそ、3DCGがもっと活用されるべきだと思っています。
…と言うわけで、今回はサイエンスCG映像が出来るまでを「UT-Heart」を具体例にして掘り下げてみました。
最後まで読んで下さった方、ありがとうございます。ぜひ、今回の記事を踏まえて最後にもう一度映像をご覧下さい。今度は世界に発信するために作った英語版を掲載しておきます。新しい発見がたくさんあるのではないでしょうか!
マルチスケール・マルチフィジックス心臓シミュレータ UT-Heart