LoginSignup
6
7

More than 5 years have passed since last update.

Maya で複雑な形状のオブジェクトを大量にレンダリングする方法

Posted at

はじめに

妹の結婚式のオープニングムービーとして、3DCGアニメーションを作成しました。
https://vimeo.com/275186052

https://vimeo.com/275186052

本稿では、この動画の作成時に利用した、形状の異なる大量のレゴブロックを物理シミュレーションさせる方法について紹介します。

Jun-16-2018 22-11-21.gif

準備

利用するツール

  • Maya 2017 update5
  • MtoA 2.1.0.2(Arnold Core 5.0.2.3)

モデルの準備

シミュレーションに使用するレゴブロックのモデルを5種類用意します。

Screen_Shot_2018-06-15_at_12_28_09.png

実現方法

大量のレゴブロックを床に散らばらせる映像を実現するために、2つの工程について説明します。

  • スタンドインの作成
  • シミュレーションの作成

スタンドインの作成

レゴブロックのモデルを大量に Maya シーンに配置していくと、シーン内の頂点数が増大するため、シーンが重くなり作業効率が低下します。この問題に対策するため、Arnold のスタンドインという機能を利用します。スタンドインを簡単に説明すると、大量の頂点の読み込みをレンダリングまで先送りするための機能です。スタンドインの詳細については、Arnold の公式マニュアルで説明されています。

https://support.solidangle.com/pages/viewpage.action?pageId=74941146

ass ファイルの書き出し

スタンドインを作成するために、まずはブロックのメッシュデータを ass(Arnold Scene Source)ファイル として出力します。ass ファイルとは、Arnold が読み込める形式のシーンファイルです。レゴブロックを選択した状態で メニューから「Arnold → StandIn → Export」を選択します。

Screen_Shot_2018-06-15_at_15_47_17.png

今回はブロックの形状だけ書き出すため、書き出し設定を以下のように変更します。

Screen_Shot_2018-06-15_at_15_50_37.png

この手順で全てのブロックの ass ファイルを出力します。

ass ファイルの読み込み

スタンドインを作成するため、ブロックの形状を模したキューブを用意します。このキューブはあとで衝突判定にも使用するので、できるだけブロックの形状に似せる必要があります。

Screen Shot 2018-06-15 at 12.43.24.png

次に、キューブに ass ファイルを割り当てます。キューブを選択して Attribute Editor を開きます。

Screen Shot 2018-06-15 at 16.03.34.png

Attribute Editor の Arnold の項目を以下のように指定します。

Screen_Shot_2018-06-15_at_16_03_34.png

適切にスタンドインが作成されているか、レンダリングして確認します。テスト用のライトを配置して、キューブにマテリアルを割り当ててから、メニューから Arnold → Render を選択します。

Screen Shot 2018-06-15 at 16.00.48.png

問題なくレンダリングできたら、他のサイズのブロックについても同様にスタンドインを作成します。

シミュレーションの作成

スタンドインを作成できたので、次にこのブロックをたくさんシーンに配置して、床に散らばせるようにセットアップします。物理シミュレーションには Bullet を使用します。

インスタンスの配置

シミュレーションに使用するスタンドインをシーンに配置していきます。このとき、通常のコピーではなくインスタンスコピーを使用します。こうすることで通常のコピーよりもメモリ消費が抑えられます。
インスタンスコピーを実行するには、メニューから Edit → Duplicate Special を選択します。

Screen_Shot_2018-06-16_at_18_08_39.png

Geometory TypeInstance を選択して、コピーするメッシュを選択した状態で Apply します。

Screen_Shot_2018-06-16_at_18_09_48.png

ある程度ブロックをランダムに配置して、ブロックを転がす床を用意します。

Screen Shot 2018-06-16 at 18.26.07.png

全てのブロックを選択し、メニューから Bullet → Active Rigid Body を選択します。

Screen_Shot_2018-06-16_at_11_59_55.png

オプションは以下のように設定します。

Screen_Shot_2018-06-16_at_18_38_28.png

床のメッシュを選択し、メニューから Bullet → Passive Rigid Body を選択します。

Screen_Shot_2018-06-16_at_18_45_35.png

オプションは以下のように設定します。

Screen_Shot_2018-06-16_at_18_41_30.png

この状態でアニメーションを実行してみます。

Jun-16-2018 18-54-03.gif

ブロックと床のマテリアルをセットアップしてレンダリングすると以下のようになります。

Jun-16-2018 22-16-00.gif

おわりに

今回はスタンドインと Bullet を使用して、レゴブロックのアニメーションを作成してみました。
制作した動画では、ブロックを積み上げて文字を作成していますが、こちらは MASH というツールの Distribute ノードを使用して制作しています。文字をメッシュ化したものに対して、スタンドインを配分させています。Distribute ノードの分かりやすい日本語チュートリアルがありますので、Maya太郎の記事を参照してください。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7