見出し画像

Houdini19.0 Solaris(USD) 変更点紹介 Part1

はじめに

Youtubeにて動画を公開しておりますので、併せてご覧ください。

動画内と同じシーンファイルを配布いたします。
演習ファイルは合計約1.3GBほどありますのダウンロードの際には空き容量などに注意してしてご活用ください。URLは下記になります。
https://drive.google.com/file/d/18vtH_383Yj7TReIoskq46UBIU8WWmiTJ/view?usp=sharing
※SideFX社さまより特別な許可をいただきHoudini 19.0に対応したデータを配布させていただいております。

はじめに2

-------------------------------------------------------

Scene Import LOP

↓下のリンクから再生すると、該当箇所から再生されます↓

Scene Import LOPとは、SOP階層のシーン(オブジェクト階層のシーン)をすべてLOP階層に読み込むことのできるHoudini19.0より追加された新しいノードです。
従来のHoudini18.5まででは、SOP Import LOPを使用してジオメトリノード1つ分ずつ読み込んでおり、オブジェクト階層で作成されているカメラやライトはLOPへ読み込むことができませんでした。

しかし、Scene Import LOPが新しく追加されたことにより、カメラやライトを含むオブジェクト階層のシーンをすべて一括で読み込むことができるようになりました。
また、その際にはSOP階層で適用しているマテリアルも読み込むことができます。読み込まれたすべてのデータは変換され、シーングラフが構成されます。

画像2

このシーンは、「testgeometry_crag」がハンマーを振りおろし、岩を砕くシミュレーションを行っています。

Geometryノードは、ディスプレイフラグが立っている物のみが読み込まれます。そして、各ノードごとにLOP階層に読み込まれ、シーングラフを構成します。

そのため、こちらのシーンでは、Geometryのノードをわけ、
「ハンマーを振り下ろすモデル」「地面」「砕かれる岩(シミュレーション)」の3つでシーンを作成しています。
そして、3つのライトと、3つのカメラを作成しています。

こちらのシーンを一括でLOPの階層に読み込んでいきます。
デスクトップをSolaris用の物に切り替え、「obj階層」から「stage階層」に移動します。移動できたら、新しく、「Scene Import LOP」を作成します。

画像3

Tabキーをクリックしてノードを呼び出す際には、「Scene Import LOP」が複数表示されます。

これらは、上から
「元のノード」(Scene Import
「SOP階層のすべてのシーンを読み込むノード」(Scene Import (All)
「SOP階層のカメラのみを読み込むノード」(Scene Import (Cameras)
「SOP階層のライトのみを読み込むノード」(Scene Import (Lights)
「SOP階層で適用したマテリアルを読み込むノード」(Scene Import (Materials))になります。

最初はすべてのシーンを読み込むために、「Scene Import LOP (All)」を呼び出します。

画像4

すると、自動的にSOP階層で作成したシーンを一括で呼び出します。

シーンビューを確認すると、SOP階層で作成したシーンが読み込まれたことを確認できます。
さらに、シーングラフを確認してみると、下の画像のようになっています。

画像5

ここに表示されているシーングラフは、最初に少し触れていますが、オブジェクト階層のすべてのノードを読み込んでおり、表示されているレイヤーがオブジェクト階層の各ノードと同じものになります。

画像6

この画像のように、各Geometryノードに対応したレイヤーがシーングラフ内に作成されます。

ここで紹介しているモデル以外にも、オブジェクト階層で作成しているライトや、カメラも同じ名前でレイヤーとしてLOP階層に読み込まれています。

ここではオブジェクト階層のすべてのジオメトリなどが読み込まれていますが、こちらは、パラメータ内の「Objects」に「*(アスタリスク)」が入力されているかつ、「Filter」が「All Object Type」になっているためです。

画像7

こちらの「Objects」の右側の「Open Floating Bundle Chooser」ボタンをクリックし、 任意のオブジェクト階層のノードを選択することで読み込む対象を変更することもできます。

例として、下の画像のように、モデルを作成しているノードのみを選択した場合は、読み込みたい対象のGeometryノードのみを選択します。

画像8

すると、読み込まれる対象が選択されたモデルを作成しているGeometryノードのみとなり、シーンビューと作成されるシーングラフが変化します。

画像9

先ほどとは異なり、シーングラフを確認してみると、読み込まれているレイヤーはマテリアルと、オブジェクトのみになっています。
このように、選択されなかったライトとカメラが読み込まれなくなります。

また、ここで選択していないマテリアルが読み込まれている理由は、マテリアルの読み込みとオブジェクトの読み込みが別々に行われているためです。オブジェクトは、先ほど説明したように、上側の「Object」の項目内で操作しますが、マテリアルに関しては、下側にある「Material」の項目内の「Additional Materials」によって選択することができます。

画像10

Objectsと同様に、「Additional Materials」によって、任意のテクスチャ(シェーダー)を選択することで、読み込む対象を変更し、指定した物のみを読み込むこともできます。

また、各項目内の一番上には、「Import Objects」と「Import Materials」のトグルがあり、こちらを無効にすることで、オブジェクトやマテリアルをSOP階層からインポートしないように設定することができます。

下の画像は、「Import Materials」を無効にしたものと、「Import Objects」を無効にしたもの、「両方」を無効にした際のシーンです。

・「Import Materials」を無効

画像11

・「Import Objects」を無効

画像12

・「両方」を無効

画像13

すると、このようにシーンが変化します。

「Import Materials」を無効にした際はマテリアルが読み込まれなくなり、
「Import Objects」を無効にした際はオブジェクトが読み込まれなくなり、
両方を無効にした場合は何も読み込まれなくなります。

このように、「Scene Import LOP」を使用することで、SOPのシーンを一括で読み込んだり、読み込む対象を操作することが可能です。

また、「Scene Import LOP」先ほど使用した「Scene Import (All)」以外にも
「SOP階層のカメラのみを読み込むノード」(Scene Import (Cameras))
「SOP階層のライトのみを読み込むノード」(Scene Import (Lights))
「SOP階層で適用したマテリアルを読み込むノード」(Scene Import (Materials))があります。

こちらは各それぞれに対応したオブジェクト階層の対象を読み込むことができるノードです。

例として、(Scene Import (Cameras))を作成してみると、以下のように、オブジェクト階層内のカメラのみをLOP階層に読み込み、シーングラフを作成します。

画像14

ほかのノードも同様に作成することで、ライトのみ、マテリアルのみを以下の画像のように読み込むことができます

ライトのみ

画像15

マテリアルのみ

画像16

また、オブジェクトのみを読み込む場合は、「Objects」の項目内で対象のノードを選択するか、「Objects」に対して「*(アスタリスク)」を入力し、「Filter」内で「Geometry Objects」を選択することでオブジェクトのみを読み込むことができます。

画像17


このようにシーンを一括で読み込むのではなく、要素ごとに読み込むこともできます。シーンを要素ごとに読み込む利点は、シーングラフの構成のしやすさにあります。
すべてのシーンを一括で読み込んでしまうと、シーングラフがフラットになってしまい。「root」に対して、すべてが直下に接ぎ木される形でシーングラフが作成されてしまいます。

画像18

このようにシーングラフが作成された場合、対象のプリムやレイヤーを探すのに手間がかかってしまう場合が多いです。
そのため、要素ごとにSOP階層から読み込み、最終的にシーングラフを結合する方法をお勧めします。

先ほどのように各要素ごとに「オブジェクト」「カメラ」「ライト」「マテリアル」を読み込みます。
読み込む際に、各ノードのパラメータ内の「Destination Path」にて、任意のレイヤー下に読み込まれる各レイヤーが作成されるように設定します。
具体的にオブジェクトを読み込む際には「Destination Path」に対して「/model/」と入力します。

すると、下の画像のように、「Model」という名前のレイヤーの中にSOP階層から読み込まれた各モデルが作成されるようになります。

画像19

このように、新しいレイヤーを追加することができ、シーングラフをまとめることができます。

こちらを各要素ごとに行い、最終手的にシーングラフを結合することで、以下の画像のように各要素ごとにレイヤー分けしたシーングラフを作成でき、フラットな状態で読み込むよりも、各レイヤーの場所を把握しやすくなります。

画像20

以下がフラットなシーングラフとレイヤー調整を行ったシーングラフの比較です。

画像21

このようにシーングラフの構成を大きく変えることができ、シーングラフを使いやすいようにレイアウトすることができます。

以上がScene Import LOPを使用したSOP階層からシーンを読み込む方法です。

SOP Character Import LOP

↓下のリンクから再生すると、該当箇所から再生されます↓

SOP階層のシーン(オブジェクト階層のシーン)で作成されたボーン(リグ)つきのアニメーションモデルのデータをリグデータを保持した状態でLOP階層に読み込むことのできるHoudini19.0より追加された新しいノードです。

従来のHoudini18.5まででは、アニメーション付きのモデルのみを読み込むことはできましたが、リグの情報を保持した状態で読み込むことはできませんでした。
しかし、「SOP Character Import LOP」が新しく追加されたことにより、リグを含むアニメーション付きのジオメトリデータをLOP階層で扱うことが可能になりました。

こちらによって、LOP階層でリグの操作が可能になります。
さらに、LOP階層から、リグのデータを保持した状態のUSDデータをOutputできるようになりました。

サンプルとして、SOP階層で以下のようなシーンを作成してあります。

Scene_Import.00_10_18_11.静止画003

※こちらのリグを含むアニメーションモデルはMixamoよりダウンロードしています。
 Mixamo:https://www.mixamo.com/#/

このリグを含むアニメーション付きのキャラクターデータをLOPの階層に、リグの情報を保持した状態で読み込む方法を紹介します。
そのための準備として、アニメーションデータをHoudini内に読み込む必要があります。

具体的には、FBX Character Import SOPを使用して、リグを含むアニメーションキャラクターデータを読み込みます。

読み込めたら、各出力に対して目印となるNullを設定し、名前を各それぞれの出力に合わせて変更しておきます。

第1出力は「Rest Geometry」の出力となっており、
キャラクターの静止ジオメトリを出力しているため、Nullの名前は「Rest_pose」とします。

第2出力は「Capture Pose」の出力となっており、
キャラクタのキャプチャポーズを出力しているため、Nullの名前は「Capture_pose」とします。
最後に、第3出力は「Animated Pose」の出力となっており、
キャラクタのアニメーションポーズ(アニメーション)を出力しているため、Nullの名前は「Animated_pose」とします。

※動画内ではキャラクターの位置を原点に固定するために「Extract Locomotion SOP」を追加しいてます。

画像23

これでSOP階層での準備は完了です。
こちらのモデルをLOP階層に読み込みます。
LOPの階層に移動し、新しく「SOP Character Import LOP」を作成します。

画像24

先ほどSOPの階層で読み込んだアニメーション付きのモデルをリグ付きで読み込んできます。

パラメータ内の
Animated Pose」「Rest Geometry」「Capture Pose」に対して、先ほどSOP階層で作成したNullを指定することで、SOP階層からリグ付きのアニメーションデータを読み込むことができます。

実際に「Animated Pose」に対して、SOP階層で作成したNull(Animated_pose)を指定することでこのようにリグの情報とそちらに適用されているアニメーションデータをLOP階層に読み込むことができます。

画像25

そして、「Rest Geometry」に対して、SOP階層で作成したNull(Rest_pose)を指定することで、モデルデータを読み込むことができ、リグ情報を含むアニメーション付きのデータをLOP階層に読み込むことができます。

画像26

「Capture Pose」に対して、Nullを読み込むと、レストジオメトリに使用するキャプチャポーズを含むSOPノードへのオプションを読み込むことができます。

画像27

ここでの注意としては、「Animated Pose」のみを読み込んでいる場合は、リグ(スケルトン)とアニメーションデータが読み込まれますが、「Rest Geometry」のみや、「Capture Pose」のみといったように、「Animated Pose」を指定していない場合は、モデルを読み込むことができません

画像28

以上のように各パラメータにしたいしてSOP階層の対応するノードを選択することでLOPの階層にリグつきのアニメーションデータを読み込むことができます。

ここで読み込まれたシーングラフを確認してみると以下のように、「Character」というレイヤーが作成され、その中に
Vampire」という名前のモデルデータ(スキン)と、
animation」という名前のデータモデルのアニメーションデータ
Skeleton」という名前のリグ(スケルトン)のデータが読み込まれます。

画像29

このように、従来ではLOP階層に読み込むことのできなかったリグを含むアニメーションモデルのデータを読み込むことができるようになりました。

こちら読み込まれたデータにはテクスチャがついていないため、テクスチャをアサインします。
ここでテクスチャをアサインする際には、テクスチャがmat階層などで作成してある場合は、そちらを読み込むことも可能ですが、FBXのモデルとして読み込んでいる場合などは再度自分でテクスチャを「Material Library LOP」などで作成する必要がある場合もあります。

画像30

こうすることでSOP階層で読み込んだ(作成した)リグ付きのアニメーションキャラクタデータをLOPの階層に読み込むことができます。

補足になりますが、アニメーション付きのモデルデータはScene Import LOPを使用して読み込むことも可能です。
しかし、「Scene Import LOP」を使用して読み込んだ場合下の画像のように、シーングラフ内にはリグ(スケルトン)やアニメーションデータは読み込まれず、単純にアニメーションのついたモデルデータとして読み込まれてしまうため、LOP階層内でリグを用いたアニメーションの操作や変更を行うことができませんので注意が必要です。

画像31

以上がSOP Character Import LOPの使用方法です。

----------------------------------------------------------------

今回の記事はここまでとなります。
閲覧していただきありがとうございました。

この記事が気に入ったらサポートをしてみませんか?