Andrew Wong 氏による OBJ アセット と SOP アセットの違いについての説明です。
Andrew 氏による過去の記事はこちら。
今週末、2018年6/23日(土)に、鳥居様によるHoudini Engineのセミナーを開催しますので、興味ある方は是非ともご参加ください。
詳細は下記リンクを参照してください。
http://indyzone.jp/catalog/form/houdini/h16/18/06/index.html
(この記事の内容を試す時は16.5.498以降を使用してください。それより前のビルドにはこの記事の内容を行うことが出来ないバグがあります。)
今回のサンプルファイルです。
OBJ_asset.zip
前回の記事では、例としてSOPアセットのみを使用しましたが、Houdiniは実際には他の多くの種類のアセットをサポートしています。すべてのタイプのアセットがMayaでサポートされているわけではありませんが、Mayaプラグインはもう1つのタイプのアセット(OBJアセット)をサポートしています。 OBJ アセットは、SOP アセットでは利用できないいくつかの機能を持っています。この記事では、OBJ アセットを作成する方法を見ていきます。
恐らく、OBJ アセットの最も重要な点は、OBJ アセットに複数のオブジェクトを含めることができるということです。 OBJ アセットは複数のOBJノードを含むことができるサブネットであり、各 OBJ ノードにはそれ自身のジオメトリが含まれます。これにより、OBJアセットは、複数のオブジェクトを含む、より複雑なアセットを作成する事が出来ます。たとえば、車のアセットには、タイヤ、車体、および椅子用に別々のOBJノードが存在する場合があります。これを SOP アセットを使用して作成する場合、SOP アセットからすべての部品を単一のオブジェクトとして出力しなければなりません。これだとパーツの整理と管理が困難です。
Houdini では、SOP ノードはジオメトリデータの生成または処理に使用され、OBJ ノードはトランスフォームの処理に使用されます。 SOP ノードには元々トランスフォームがありません。ジオメトリを正しく配置する為にはジオメトリにトランスフォームを追加する必要があり、そこで OBJノードが必要なのです。 Mayaと比較すると、SOPは 「polySphere」または 「mesh」ノードに似ており、OBJは 「transform」ノードに似ています。
OBJ アセットを作成する方法を見てみましょう。この手順はSOP アセットを作成する場合と非常によく似ています。 SOP アセットを作成するには、SOP サブネットを使用します。 OBJ アセットの場合は、OBJ サブネットを使用してOBJ アセットを作成します。
- Houdini で、シェルフを使用してシーン内に Box と Sphere を作成します。これによりシーン内に2つのOBJノードが作成されます。
2. OBJ アセットは OBJ サブネットであるため、アセット内に必要な2つのOBJノードを格納するサブネットを作成します。これを行うには、2つのOBJノードを選択し、ツールバーからサブネットアイコンをクリックします。
あるいは、選択したノードを右クリックして、「Action -> Collapse to Subnet」を選択することもできます。
選択された OBJ ノードは、新しい OBJ サブネット内に格納されます。
(もちろん、Houdiniに慣れている人は、まず手動でOBJサブネットを作成してから、サブネット内に直接 Box と Sphere を作成することができます。そうすることで、上のステップを踏む必要はありません。)
3. OBJ アセットを作成するために必要なOBJ サブネットができました。 SOP アセットの場合と同様に、OBJ サブネットを右クリックし、「Create Digital Asset」を選択します。 OBJ サブネットをOBJ アセットに変換するための残りのステップはSOP アセットの場合と同じなので、ここでは詳細は省きます。
4. HDAファイルを作成した後、アセットをMayaに読み込むことができます。アセットをロードする手順は、SOP アセットの場合と同じです。アセットを読み込んだ後、ビューポートには Box と Sphere が表示されます。
OBJ アセットからの各 OBJ ノードが別々のオブジェクトとして Maya にロードされていることがわかります。さらに、Maya オブジェクトのトランスフォームを見ると、これらの 2 つの OBJノードの実際のトランスフォームが May aに出力されている事がわかります。この場合、Sphere はX軸に沿って移動しています。
見て分かるように、OBJ アセットを使用すると、別々のオブジェクトを Maya に出力する事ができますが、各オブジェクトは独自のトランスフォームを持っています。 仕様で SOP アセットにはトランスフォームがありません。ただし、SOP アセットが Maya プラグインでロードされている場合、ジオメトリはトランスフォームノードの子供となります。これにより、ワールド座標内でジオメトリに位置を与え、 SOP アセットが OBJ アセットと同様に見えるかもしれません。ですが、OBJ アセットは SOP アセットとは大きく異なり、複数のオブジェクトが必要な場合や、トランスフォームがアセットの重要な部分である場合に役立ちます。
トランスフォームをもう少し詳しく見てみましょう。 Maya のアトリビュートエディタからは、実際にトランスフォームは単純なスタティックな値ではなく、 Houdini アセットに接続、コントロールされれいます。なので OBJ アセットはアニメーションされたトランスフォームを Maya に出力することができます。最初のアセットを使って、Houdini アセットからアニメーションを出力する方法を見てみましょう。
アニメーションを示すにはキーフレームアニメーションで十分ですが、少し高度なものを試してみましょう。エクスプレッションを使用して1つのアニメーションを作成し、CHOPネットワークを使用して別のアニメーションを作成します。 CHOPに慣れていない人の為に説明すると、CHOPはプロシージャルに1次元データを生成するものです。 CHOPは主にプロシージャルアニメーションの作成に使用されますが、他のものにも使用する事ができます。 今回はOBJ アセットを構築していますが、OBJノードとSOPノードしか使えないという事ではありません。 Houdini は、Houdini のどの部分でもアセットを作成することができる柔軟性を持ち合わせています。
- 新しい Houdini セッションで、HDAファイルをインストールし、以前作成したOBJ アセットのインスタンスを作成します。デフォルトでは、間違って編集してしまう事を防ぐためにアセットがロックされています。アセットにいくつかの変更を加えたいので、そのアセットのロックを解除する必要があります。ノードを右クリックし、[Allow Editing of Contents]を選択します。これでアセットの内容を変更できるようになりました。
2. 2つのオブジェクトにアニメーションを追加できるようになりました。Sphere に単純なエクスプレッションを使用してアニメーションを設定します。 sphere OBJノードを選択し、下図のパラメータに書かれているようにエクスプレッションを入力します。
タイムバーを動かすと、Sphere が円を描くのが分かります。
3. 次に、簡単なCHOPネットワークを作ってランダムなノイズを Box に追加します。 CHOPでこれを行うので、最初にCHOPネットワークが必要です。 OBJ サブネット内で CHOP ネットワークを作成します。 CHOP ネットワークは、2つのOBJノードと同じレベルになければならないことに注意してください。
4. CHOPネットワーク内に入り、Noise CHOP を作成します。
5. デフォルトでは、「chan1」という名前の1つのチャンネルにのみノイズが発生します。しかし、 Box の3軸すべてにノイズを適応したいので、tx、ty、tz チャンネルにエクスポートする必要があります。これを行うには、「Channel Name」を「tx ty yz」または「t [xyz]」に設定します。
次に、ノード情報を表示するためにノードを中クリックすることによって、チャンネルを確認することができます。
6. この時点で、Noise CHOPは3つのチャネルを生成しています。しかし、3 つのチャンネルすべてが同じランダムシードを使用しているので、3つのチャンネルは全く同じ値を持っています。ローカル変数 $C はチャンネルのインデックスに評価されます。このインデックスを使用して、「Seed」パラメータを $C に設定することによって、各チャンネルに異なるシードを割り当てることができます。
7. 表示フラグを設定し、Motion FX View ペインをチェックすることで、生成されたノイズの値を見ることができます。これが必要なノイズとチャンネルです。
8. 欲しいチャンネルができたので、 Box を上書きするためにチャンネルをエクスポートします。 Export CHOPを作成し、Noise CHOP の出力をその入力に接続し、エクスポートフラッグを設定します。
9. Export CHOP を設定して、チャンネルを Box にエクスポートする必要があります。 「Node」 パラメータは Box オブジェクトを指す必要があります。絶対パスはシーンによって異なるため、ここでは相対パスを使用することが重要です。たとえば、アセットノードの名前が常に「my_obj_subnet1」であるとは限りません。Chooser Operator からノードを選択する場合、「Export Relative Path」を有効にすると、相対パスが生成されます。
また、 「Path」パラメータを 「 t [xyz] 」に設定して、チャンネルを必要なパラメータにエクスポートする必要があります。
Export CHOP のパラメータは、次のようになります。
10. Box オブジェクトのパラメータをチェックして、エクスポートが機能することを確認することもできます。トランスフォームのパラメータが茶色で表示されており、これはパラメータがCHOPネットワークによって駆動されていることを意味します。
ビューポートを見ると、 Box がランダムに動いている事がわかります。
11. 最後に、アセットを保存します。 Houdini のビューポートでは、2つのアニメーションの最終結果を確認できます。
12. Mayaでは、特に何もする必要はありません。以前と同じようにアセットをロードするだけです。そして、ビューポートでは、Sphere が回転していることがわかり、Box がランダムに動いています。Box と Sphere のトランスフォームを調べると、トランスフォームアトリビュートを使用してオブジェクトがアニメーション化されている事が分かります。
この記事では、OBJ アセット がSOP アセットとどのように異なるかを見てきました。一般に、アセットが複数のオブジェクトを含む必要がある時、またはトランスフォームを Maya に出力する必要があるときにOBJ アセットを使います。アセットがジオメトリ作成のみに焦点を当てている場合はSOP アセットを使います。 この記事が、どういった場合に SOP アセット、OBJアセットを作成するのかという面で役に立つことを願っています。
また、エクスプレッションとCHOPネットワークをアセットの一部としてどのように使用できるかを示しました。
OBJ アセットを作成しましたが、OBJノードとSOPノードだけでなく、 OBJ アセットがトランスフォームとジオメトリを出力する限り、Houdiniのどんな機能でも使用できます。 Houdini Engineは、アセットを作成するためにどんなノードやネットワークでも使用する事が出来ます。これを覚えておけば、クリエイティブで複雑なアセットを作成するのに Houdini を十分に活用することができるでしょう。