On this page |
はじめに
以下には、LOPとUSDに関連した一般的な用語を載せています。
Pixarの全USDドキュメントはここにあります。
このドキュメントは、Houdiniユーザーが使用頻度の高いUSD用語について調べて理解できるように作成しており、USDとHoudiniの両方で起きる用語の重複を明確化するのに役立ちます。 それぞれの見出しは、PixarのUSDドキュメントのリンクで始まっています。 見出しに何もテキストがない場合は、その用語が使用頻度の高い用語の一つでは ない と考えています。 USDリンクがない場合は、その用語はUSD用語ではなくてHoudini用語または補足用の用語です。
用語集
Active / Inactive(アクティブ / 非アクティブ)
ステージからPrims(と子Prims)を"Prune(取り除く)"することができる非破壊的な挙動。 合成されたステージ上で(その場で)これを実行します。 デフォルトでは、すべてのPrimsはアクティブです。これはHoudiniでいうオブジェクトノードのディスプレイフラグの概念と同様です。
USD Primsの重要な特性は、合成されたステージから永久にPrimsを削除することができないことです(たいていは一度ステージ上の何かになるので、誰でもそれを参照して何かを駆動させることができます)。 USDは、非破壊的な削除をする非アクティブ化に対応しています。 アクティブ化は、合成を介してPrimsが解決されることを意味した1つのオピニオンです。
これは、何かしらの効果を無効にしてシーンを可視化したい時によく使用します。 例えば、キャラクタに特化したライトを表示させたいのであれば、シーンのライティングを削除した方が良いでしょう。 Houdiniと同様に、アクティブ化と表示は考え方が異なります。 しかし、Houdiniでは、ライトの表示を無効にしても、そのライトのシーンへの寄与には何も影響しません。 LOP/USDでは、ライトの表示を無効にすると、実際にその寄与が 無効になります 。
LOPでは、"Configure Layer"または"Prune LOP"を使ってアクティブを設定します。
Muting(ミュート)とVisibility(可視性)も参照してください。
Note
HOUDINIメモ: HoudiniのBullet RBDシミュレーションでは、active
Pointアトリビュートを使って、オブジェクトのアクティブ/非アクティブを制御しています。
Active Layer(アクティブレイヤー)
ほとんどのLOPノードは、1番目の入力からコピーされたUSDステージ上のデータに対して編集を行ないます。 これらの編集は、LOPノードのステージのルートレイヤー上で常に一番強いサブレイヤーである"アクティブレイヤー"内に作成されます。
Alembic(アレンビック)
API Schema(APIスキーマ)
複数の異なるタイプのPrimsに適用する必要がある関連プロパティ、メタデータ、場合によっては関連動作も用意したい時には、APIスキーマを作成することが選択肢になります。 例えば、あなたのパイプラインで、すべてのGPrimに対して編集する3個のアトリビュートがあって、それらのアトリビュートを編集/抽出するための堅牢なスキーマを用意したいのであれば、それ用のAPIスキーマを作成することができます。
スキーマも参照してください。
AOV
AOVとは、"Auxiliary Output Variable(補助出力変数)"のことで、USD用語ではありませんが、Houdiniでいう従来の"Extra Image Planes"を意味した一般的に広まっている業界用語です。 LOPコンテキストでも、AOVと呼んでいますが、Houdiniでは今でもどこかで"Extra Image Planes"を目にすることでしょう。
AOVは、レンダリング処理の一部を抽出してレンダリングされた画像(例:ディフューズ寄与度、スペキュラー寄与度)または任意のデータ(例:ID、depth、velocity)です。AOVは、"ビューティー"パスがレンダリングされている最中に作成され、個々のファイルまたはEXRレイヤーとして保存することができます。
AOVのことを"arbout"(Arbitrary Output)、"Deep Raster"、"Rendervars"とも呼んだりします。 AOVと"レンダーパス"を混同しないでください。"レンダーパス"は完全に分離されたレンダーを指します(これにはAOVも含まれます)。
Assembly(アセンブリ)
Assemblyとはグループモデル、要するに、他のモデルを意味のある集合体に集めたモデルのことです。 Assemblyは主に他のモデルの参照で構成し、それらの参照自体はパブリッシュされたアセットです。
アセンブリ、グループ、コンポーネント、サブコンポーネントは、ステージの管理に役立つ体系化フレームワークです。 USDやHoudiniに同梱されている台所シーンのサンプルを見てみましょう。 このシーンでは、台所にたくさんの家具、電化製品などが配置されています。 これらの物を日常用語で意味のわかる方法でグループ化した方が明らかに都合が良いです。
体系名 |
例 |
モデルの種類は? |
描画モードを設定できるか? |
他の種類を含めることができるか? |
---|---|---|---|---|
Assembly |
Kitchen |
Yes ✔ |
Yes ✔ |
Assembly, Group, Component ✔ |
Group |
Dining Table |
Yes ✔ |
Yes ✔ |
Group, Component ✔ |
Component |
Chair 1 |
Yes ✔ |
Yes ✔ |
Subcomponent ✔ |
Sub-component |
Chair 1 Cushion |
No ⤬ |
No ⤬ |
No ⤬ |
サブコンポーネント以下には何も配置することはできません。 サブコンポーネントはリーフになります(例えば、クッションを構成している個々のポリゴン)。 サブコンポーネントに対して描画モード(シェード、ワイヤーフレーム、境界ボックス)を設定することもできません。
USDでは、Assemblyは一種のモデルです。
"Model Kind"とは何かについては、モデルを参照してください。
Asset(アセット)
アセットとは、コンテンツ制作パイプラインにおける、非常に一般的な構成概念のことです。 アセットは、単一ファイル(例えば、UVテクスチャ)を意味することもあれば、ある単一ファイルを基準として順々に他のファイルを参照するファイル群を意味します。 重要な品質のアセットは、一般的にはパブリッシュしてバージョン管理します。 ASCII USDフォーマットは、通常文字列と簡単に区別できるようにアセット値文字列に対して特殊構文を使用し、アセット値を区切る際には引用符ではなく"@"記号を使用します。AssetInfoでサンプルを参照してください。
AssetInfo
もうすぐ
Asset Resolution(アセット解決)
Attribute(アトリビュート)
アトリビュートとは、ほとんどのUSDシーンで編集する最も一般的なタイプのプロパティのことです。 (他のHoudiniのアトリビュートと同様に)アトリビュートは、単なる何種類かの値です(例えば、カラー、浮動小数点、トランスフォーム行列、値の配列)。 アトリビュートはアニメーション可能であり、配列で各タイムサンプルを保存します。
アトリビュートは"強者が勝つ"ルールに基づいた解決をするので、指定したアトリビュートの値すべてが最強のPrimSpecから取得されます。 例えば、デフォルト値を持った"弱いレイヤー"は、アニメーションを持った強いレイヤーでマスクされます。 これは、レイアウト部署がシーン内にプロップを配置し、後でアニメーション部署がそのプロップをアニメーションさせたケースです。
USDに"デフォルト"時間における値を照会すると、デフォルト値が設定されていれば、その値が返され、設定されていなければ空っぽの値が返されます。 すべてのタイムサンプル値は無視されます。他の時間における値を照会し、デフォルト値またはタイムサンプル値が設定されていれば、その値が返されます。 この値は、デフォルト値(最初のタイムサンプルより前の時間で値を照会した場合)、最近接タイムサンプル値、2つの周辺タイムサンプル間の線形補間値のどれかです。
Attribute Block(アトリビュートブロック)
Attribute Connection(アトリビュート接続)
Attribute Variability(アトリビュートの多様性)
Change Processing(変更処理)
Class(クラス)
Clips(クリップ)
Collection(コレクション)
USDのコレクションは、Primのグループであると考えることができ、LOPsにはコレクションの操作を便利にするための仕組みがいくつかあり、 その仕組の一部は、ターゲットパターンセクションで説明しています。 これはHoudiniバンドルに似ています。
コレクションは、"Include"リストと"Exclude"リストで構成します。
Component(コンポーネント)
Composition(コンポジション)
コンポジションとは、お互いにレイヤーを関係付ける コンポジションアーク によって複数の レイヤー を組み立てる処理のことです。 コンポジションは、最初にUsdStageを開いた時、そのステージ上のPrimをロードまたはアンロードした時、そのステージに寄与しているレイヤーを編集した時に実行されます。
時折、"コンポジション"とか"合成Prim"とか"合成シーン"と呼ぶこともありますが、どちらの呼び方でも、コンポジションを実行した結果のことを意味します。
LOPでは、Scene Graph Details内のCompositionタブがPrim/アトリビュート(それぞれ"PrimStacks、"PropertyStacksと呼びます)に寄与しているすべてのコンポジションアークを表示します。 PrimStacks/PropertyStacksは、Layer Stacksとは原理的に似ていますが少し異なります。
USDでのコンポジションは、非常に奥深いテーマなので、この概念が浸透し始めるまでにしばらく時間がかかることに驚かないでください。 Sublayer(サブレイヤー)、Reference(リファレンス)/Payload(ペイロード)、VariantSets(バリアントセット)からかなり多くの利用価値が得られます。 すべてのコンポジションアークを理解するもの良いでしょうが、これら3つのコンポジションアークは間違いなく一番使用頻度が高いです。 以下のコンポジションアークは、強い順で並べています:
LIVRPS Strength Ordering(LIVRPS強度順番決め)も参照してください。
Composition Arcs(コンポジションアーク)
コンポジションアークとは、USDでたくさんのレイヤーで構成されたリッチなコンポジションの作成を可能とする"オペレータ"のことで、強いレイヤーが弱いレイヤーをオーバーライドします。 コンポジションアークには、SubLayers(サブレイヤー)、Inherits(継承)、VariantSets(バリアントセット)、References(リファレンス)、Payloads(ペイロード)、Specializes(特別化)の6種類があります。
Composition(コンポジション)も参照してください。
Connection(接続)
Context Options(コンテキストオプション)
コンテキストオプションとは、LOPネットワークのコンテキストを変更する際に使用可能な特別な変数のことです。 コンテキストオプションを使用することで、例えば、いくつかの異なるショット間でグラフを切り替えたり、異なるライティングセットアップをWedgeさせる際にグラフを切り替えることができます。 コンテキストオプションはグローバルで設定することができ、ネットワーク内に特別なブロックをセットアップすることでコンテキストオプションをローカルに設定することができます。 ForEach LOPはコンテキストオプションの特別なブロックのセットアップと考えることができます。
Crate File Format(木箱ファイルフォーマット)
USDファイルのバイナリフォーマットのことで、ファイル拡張子は.usdc
です。
".usd"ファイルフォーマットは特別で、その拡張子のファイルはCrateファイルやASCIIファイルのどちらにも使うことができます。
usdcatを使用することで、これらのファイルフォーマット間を変換することができます。
Def
Default Value(デフォルト値)
Delegate(デリゲート)
Hydraを参照してください。
Direct Opinion(ダイレクトオピニオン)
Draw Mode(描画モード)
CGでは一般的に"Draw Mode"とは、ビューポート内でジオメトリを描画する方法(ワイヤーフレーム、シェードなど)を指します。 USDでは、これは、有効なKind Model階層内のプリミティブ上に設定可能なメタデータで、そのPrimと子Primをフルジオメトリ、境界ボックス、テクスチャカード、Prim原点の座標のどれかによる描画を制御します。
EditTarget(編集ターゲット)
Explicit Layers(明示レイヤー)
明示レイヤーは、LOPネットワークの処理時にユーザーが新しいレイヤーを作成するように指示した結果として生成されたUSDレイヤーのことです。 このレイヤーには、"Start New Layer"に設定されたLayer Configureノードの後に作成されたレイヤーまたは保存パスが設定されたノードで作成されたレイヤーが含まれます。 明示レイヤーは、Flatten All LayersモードまたはFlatten Stageモードでない限りは、USD出力中に他のレイヤーと結合されません。
Implicit Layers(暗黙レイヤー)も参照してください。
Fallback(代替値)
File Formats(ファイルフォーマット)
USDファイルには、ライト、カメラ、マテリアル、レンダー設定、アニメーション、ジオメトリ、もちろん完全シーン記述を格納することができます。USDファイルは以下の形式で保存することができます:
-
.usda
: ASCII(人が解読可能な形式で、通常では部署向けまたは上層レベルのレイヤーで使用します) -
.usdc
: バイナリCrate(読み書きが高速で、通常では大規模キャッシュで使用します) -
.usd
: 上記のどちらにもなることができます。
Note
usdcat
ユーティリティを使用することで、ファイルフォーマット間を変換することができます。
FXアーティストなら、上記のフォーマットのどれに対しても(1,2,3,4または1.25,1.50,1.75,2.0)のように選択したタイムサンプルを保存することができるのか興味があることでしょう。 そのような連番のサンプルで各タイムサンプルを別ファイルまたは1ファイルのどちらで保存するのか選択することもできます。
Flatten(平坦化)
平坦化とは、複数のUSDレイヤーを単一USDレイヤーに結合することを言います。これは、一度合成されると、元のレイヤー構成と同じになります。 USDは、2種類の方法で平坦化を行なうことができます。 1つ目の方法はレイヤーの平坦化です。これは、レイヤーを合成する前にそれらのレイヤーを平坦化します。 つまり、ReferencesとVariantSetsのようなコンポジションアークは、この平坦化されたレイヤー内で存在し続けます。 2つ目の方法はステージの平坦化です。これは、すべてのコンポジションアークが既に適用済みの状態で合成されたステージを平坦化します。 つまり、ReferenceファイルまたはPayloadファイルすべての内容が、1枚に生成されたレイヤーに合成されます。 バリアントと他の内部コンポジションアークは、現行値にハード化されるので、プリミティブが今までバリアントコンポジションアークを持っていたことを知ることができません。
Graft(接ぎ木)
References(リファレンス)を参照してください。
Gprim(ジオメトリックプリミティブ)
Gprimは、PixarのRenderman用語に由来し、"Geometric primitive"の略です。 つまり、イメージ化/レンダリングによって何かが直接的に描画されるPrimのことです。
Group(グループ)
HoudiniLayerInfo Primitive
LOPステージは、USD ROPの保存工程の時、または、特定のLOPノードのクックメソッドで使用されるHoudini固有の追加メタデータを格納します。
このメタデータは、シーングラフ内の/HoudiniLayerInfo
にある専用USDプリミティブ上に格納されます。
この/HoudiniLayerInfo
は、'HoudiniLayerInfo'という名前のカスタムUSDプリミティブタイプです。
(明示的に保存工程がHoudini固有のカスタムデータを保持するように要求しない限り、とはいっても、通常はLOPネットワークの挙動をローレベルでデバッグする場合にしか役に立ちませんが)このプリミティブは保存工程の時に削除されるので、どの外部ツールもこの特別なプリミティブタイプについて知る必要はありません。
Hydra
Hydraは、ビューポートでUSDステージを描画する時に使用される機構です。 レンダリングする際にHydraから情報を受け取るプラグインのことをレンダーデリゲートと呼びます。 HoudiniにはOpenGLデリゲート、サンプルとしてEmbreeデリゲート、あともちろんKarmaが同梱されています。
Implicit Layers(暗黙レイヤー)
暗黙レイヤーとは、LOPネットワークがメモリ内に作成したレイヤーのことで、これを(また別にLOPネットワークで作成された)他の明示レイヤーに平坦化させると、保存工程の時に無関係な要素として消されます(といっても、暗黙レイヤーが表現したオピニオンは、平坦化されても保持されるようにすることができます)。
暗黙レイヤーには、デバッグフラグを設定したLOPノードで作成されたレイヤー、Separate LayersモードでMerge LOPによって自動的に開始された新しいレイヤーが該当します。
Explicit Layers(明示レイヤー)を参照してください。
Inactive(非アクティブ)
アクティブ/非アクティブを参照してください。
Index(インデックス)
Inherits(継承)
Inherits(継承)は、ローカル参照と同様ですが、複数レベルの参照に至って"活動"させたままにすることができます。 一般的には、Inherits(継承)を使って、ツリーやマテリアルのような基本"クラス"アセットから変更を派生させることになります。
Instanceable(インスタンス化可能)
Instancing(インスタンス化)
USDでは、2つの方法のインスタンス化があります:
-
ネイティブインスタンシングは、効率的にアセットのコピーをたくさん表現できるようにするために、USDに単一の"マスタープリミティブ"を生成するように命令するプロパティです。
-
ポイントインスタンサーは、ジオメトリの膨大なコピーを効率的に表現できる特別なスキーマです。
どちらのタイプのインスタンス化も、各プリミティブのトップレベルのトランスフォームに対応しており、さらに、(各ネイティブインスタンスに対して、または、ポイントインスタンサープリミティブに対して)Primvarsを編集してインスタンス単位でマテリアルプロパティを設定することもできます。 ネイティブインスタンスは、各インスタンスの実トランスフォームで、各インスタンスはシーン内で固有のネームスペースとして表現されます。 ネイティブインスタンスは、簡単にインスタンスからヒーローに昇格することができます(単に"instanceable"プロパティを無効にするだけです)。
ポイントインスタンサーは高速ですが、すべてのインスタンスのトランスフォームは、ポイントインスタンサープリミティブ上の配列アトリビュートとして設定されます。 インスタンスからヒーローに昇格させるには、シーンをMutate(変異)させる必要があります。 生成させたいインスタンスの数が多いほど、たいていの場合はヒーローに昇格させるよりもポイントインスタンスのままにする方が望ましいです。
Interpolation(補間)
IsA Schema(IsAスキーマ)
Karma
Karmaは、LOPsで使用する新しいCPUベースのレンダラーです。 KarmaはUSDを取り込んで、Hydra APIを使って動作するように設計されています。 私どもは、レガシーファイルをレンダリングできるようにMantraの搭載を継続しますが、新しいすべての開発はKarmaに移行しています。
デリゲートも参照してください。
Kind(種類)
私どもは、Kindを使用してUSD内のPrimsをそのPrimのスキーマタイプで用意されたカテゴリよりももっと高いレベルのカテゴリに分類します。 これは主にUSDにおける体系化の概念である"Model Hierarchy"に応じて役割を割り当てるのに使用します。 詳細は、アセンブリのセクションを参照してください。
Layer(レイヤー)
レイヤーは、ディスク上の個々のusd/usda/usdcファイルのどれかであり、他にも、後でディスクに書き出せるようにLOPノードによってレイヤーをメモリ内に作成することもできます。 シーン内に数百または数千ものレイヤーを持つことは、よくあることです。 これらのレイヤーがまとめて合成されて、ユーザー側に完全なシーングラフのビューを表示します。
例えば、モデリング部署からは、1つのモデルまたは複数のモデルを含んだ1枚以上のレイヤーが納品されることでしょう。 プロップ/キャラクタ/アセットは、だいたいそれ自身がレイヤーになりますが、アセットに関しては複数のレイヤーで構成されることもあります。 レイアウト部署は、それらの個々のアセットを参照したレイヤーを作成し、それらのレイヤーをシーンにアセンブル(組み立て)します。 アニメーション部署からは、それらのレイヤーの一部または全部にアニメーションを付けたレイヤーが納品されます。
レイヤーは、シーングラフ内のPrimsに関するオピニオンを含んでいます。 これらのオピニオンの一部は、Primsと値を定義し、それ以外のオピニオンは値をオーバーレイします。 レイヤーは、ディスク上のファイルから読み込むのですが、他にも単にメモリ内に存在するレイヤー(これを"Anonymous(匿名)"レイヤーと呼びます)もあります。
レイヤーまたはサブレイヤーをミュートすることができます。ミュートすると、そのレイヤーはシーンに何も影響を与えなくなります。 これは、レイヤーに何かを破棄させる時、または、レイヤーの再生や操作が遅くなった時に役立ちます。
LOPsでは、レイヤーのプロパティを設定する時は"Configure Layer LOP"を使用し、レイヤーにミュートを設定したり、シーンにマスクを追加する時は"Configure Stage LOP"を使用します。
Implicit Layers(暗黙レイヤー)も参照してください。
Layer Offset(レイヤーオフセット)
LayerStack(レイヤースタック)
LayerStackとは、USDのコンポジションを理解するための要石です。 LayerStackの定義は単純です:"レイヤーからすべてのサブレイヤーを再帰的に収集した順番通りのレイヤー群。ここには、そのレイヤー自体が1番目で最強として含まれます。"
LayerStackがコンポジションを理解する上で重要である理由が2つあります:
-
コンポジションアークは、レイヤーではなくLayerStackをターゲットにします。レイヤーが他のレイヤーをリファレンス(またはペイロードもしくはサブレイヤー化)した時、そのレイヤーが単一レイヤー内のデータだけでなく、そのターゲットレイヤーのルートのLayerStack内のすべてのデータも(強い順で)ターゲット(そしてコンポジット)にします。
-
LayerStackには、参照をリスト編集可能なコンテナが用意されています。多くのコンポジションアーク(とリレーションシップ)は、単一ターゲットだけでなく、順番付きでターゲットのリストを記述することができます。これらのターゲットは、コンポジションアークのタイプに応じて(順番に)処理されます。LayerStackのレイヤー間で参照を"リスト編集"することができます。これは、大規模スケールのシーン構造をパイプラインに流す際に、そのシーン構造を非破壊的に変更できる強力なメソッドです。
例えば、シーケンスレベルで汎用版の特別なエフェクトをシーンに追加したとします。 今、ショットレベルでshotFX.usdレイヤーがあります この特定のショットでは、そのショットが完全に異なるPrimを所有しているので、汎用乱流エフェクトを別のエフェクトに置換する必要があります。 そのため、turbulence.usdのPrimはまだ"存在"しているので、余分な参照を"追加"するだけでは不十分です。 つまり、弱い参照をさらに削除しなければなりません。これは、リスト編集で可能です。
キャラクタアニメーションやカメラなどのショットに寄与するレイヤーは、通常ではサブレイヤーにします。
Leaf(リーフ:葉っぱ)
"リーフ"という用語はUSD用語ではなく、子を持たない分岐構造の末端を意味した一般用語です。 ファイルツリーだと、ディレクトリやファイルの入れ子リストの中の最後のファイルがリーフタイプです。
List Editing(リスト編集)
LIVRPS Strength Ordering(LIVRPS強度順番決め)
Load / Unload(ロード / アンロード)
Localize(ローカライズ)
Locked Stage(ロックされたステージ)
Sublayer LOPまたはReference LOPの2番目以降のレイヤー入力からLOPノードの出力にアクセスする時、または、LOP Import SOPからLOPノードの合成ステージにアクセスする時、そのアクセス先のLOPノードで生成された合成ステージはロックする必要があります。 ロックされたステージは、そのLOPノードの共有ステージのコピーになりますが、そのアクティブレイヤーの内容はそのステージのルートレイヤーにコピーされます。 ロックされたステージは、変更されないことが保証され、ディスク上のファイルと同様に、クックチェーンの下流にある他のLOPノードからも修正することはできません。
LOPs
Houdiniのライティング/ルックデブのコンテキストはLOPsで、Lighting Operatorsの略です。 LOPネットワークはSOPsに似ていますが、Houdiniのジオメトリモデルを使うわけではなくて、LOPsはUSDシーン記述を使います。
LOP Stage / Shared Stage(LOPステージ / 共有ステージ)
すべてのLOPは、合成されたUSDステージを生成することができます。 とはいえ、パフォーマンスとスケーラビリティの観点から、大元のUSDステージをチェーン内の複数のLOPノード間で共有させることができます。 そのため、LOPノードで生成された合成ステージのことを、そのステージを共有できるかどうかでLOP Stage(LOPステージ)またはShared Stage(共有ステージ)と呼びます。 しかし、どちらの用語も同じ意味です。
Metadata(メタデータ)
Model(モデル)
USDでは、"Model"は単一コンポーネントでも複数グループコンテナでもありません。これは、単にコンポーネントとグループの中間である"抽象的な"共通性です。
私どもは、特定のPrimをモデルとしてラベルを付けて、大きなシーングラフをもっと管理可能な単位に分割します:
Note
従来のコンピューグラフィックスの感覚でUSD "モデル"のことを考えないでください。 USD "モデル"は、大きなシーングラフをもっと管理可能な単位に分割する際に使用する抽象的な概念です。
Model Hierarchy(モデル階層)
Muting/Layer Muting(ミュート/レイヤーミュート)
レイヤーの重要な特徴の1つは、レイヤーをミュートすることができることです。 レイヤーをミュートすると、そのステージが再合成され、ミュートしたレイヤー(s)のすべてのオピニオンは、もはやシーンに何も影響を与えなくなります。 レイヤーがショット内の何かを壊してしまった場合、または、レイヤーに何かしらの望ましくない効果があった場合、そのレイヤーはサブレイヤーのリストから削除することなくミュートにすることができます。 レイヤーをミュートするには、そのレイヤーはサブレイヤーである必要はないのですが、一般的には本番環境で最終的にミュートすることになるレイヤーです。
例えば、FXがshot.usda
レイヤーより上のレイヤーで作業した場合、ショットの再生は非常に遅いです。
この場合、そのショットを読み込んだアーティストは、単にそのshotFX.usd
レイヤーをミュートするだけで、USDはそのショットを再合成しますが、そのshotFX.usd
レイヤーのすべてのオピニオンは無視されます。
アクティブも参照してください。
Namespace(ネームスペース)
Opinions(オピニオン)
レイヤーは、シーングラフ内のPrimsに関するオピニオンを含んでいます。 これらのオピニオンの一部は、Primsと値を定義し、それ以外のオピニオンは値をオーバーレイします。
オピニオンとは、USDのValue Resolution(値解決)に関与する原子的なエレメントです。 メタデータ、アトリビュート、リレーションシップの値を編集する度に、あなたは特定のレイヤー内のPrimSpec内のオブジェクトのオピニオンを表現していくことになります。 合成したステージ上では、異なるレイヤーの複数のオピニオンがオブジェクトに影響を与えます。
ここで例を挙げます: アセット部署で編集されたボールがあったとします。 そのアセット部署では、このボールを赤にすることに決めて、このボールに(1,0,0)のディフューズカラーを設定しました。 この場合、そのディフューズカラーが"オピニオン"です。 後で、ライティング部署で、そのボールを青にすることに決めて、ローカルレイヤースタック内で(0,0,1)のディフューズカラーを設定しました。 この"オピニオン"は、強いレイヤーに存在するオピニオンが優先されるので、そのボールが青でレンダリングされます。
"オピニオン"オペレータとか"オピニオン" LOPなるものは存在しません。 LOPノードを使ってオピニオンを編集し、それらのオピニオンをUSDで解析させて、ステージの合成を決定します。
Over(オーバー)
Path(パス)
USD ASCII構文(とドキュメント)では、パスは、かぎ括弧で閉じます。例:
-
</Root/Child/Grandchild>
は、入れ子化された3つのPrimの絶対Primパスを表現しています。 -
</Root/Child/Grandchild.visibility>
は、Grandchild Primの"visibility"プロパティを指しています。 -
</Root/Child/Grandchild{modelingVariant=withCargoRack}/GreatGrandchild>
は、"modelingVariant"バリアントセットの"withCargoRack"バリアント内で編集された"GreatGrandchild"子Primを表現しています。
Payload(ペイロード)
ペイロードとは、最適化するためにアンロードが可能な特別な種類のReference(リファレンス)のことです。 この理由から、アセットの非常に重い部分(つまり、ジオメトリ)は、普段だとアセット内でペイロードとして読み込みます。 ペイロードはリファレンスよりも弱いです。ペイロードでファイルを合成しておけば、シーンのどの部分をメモリ内に読み込むべきなのか制御するのが簡単になり、 シーン内の興味のある部分だけを読み込んで注力することで、メモリ使用量と処理時間を抑えることができます。
デフォルトでは、Houdiniは、すべてペイロードとして読み込みます(この挙動はリファレンスとまったく同じです)。 しかし、Configure Stage LOPとシーングラフツリー内のLoad Masksコントロールでは、このデフォルトですべてのペイロードを読み込む挙動を無効にして、 どれをペイロードとして読み込むのかを指定することができます。
Path Translation(パス変換)
Point Instancers(ポイントインスタンサー)
USDには独自のポイントインスタンサーモデルが搭載されています。 これは、非常に強力で、ジオメトリ、ボリューム、他の階層をインスタンス化することができ、さらには、他のポイントインスタンサーまでもインスタンス化することができます。
Point Instancerスキーマは、大量のジオメトリを可能な限り高速に描画できるように設計されています。 大量の瓦礫をシミュレーションしてアニメーションすることがよく求められるFXアーティスト用に主に設計し実装されました。 Point Instancer LOPは、Houdini標準のインスタンスPointアトリビュートを使って、各インスタンスのトランスフォームを調整します。
ポイント上にインスタンス化された各モデルのことを"プロトタイプ"と呼び、Point Instancer Primsはたくさんのプロトタイプを割り当てることができます。 Point Instancer Primsのアトリビュートを介してインスタンス毎のバリエーションを表現することができないのであれば、別のプロトタイプを使用する必要があります。 プロトタイプには、アニメーションジオメトリを含めることができ、Point Instancer Primsは他のPoint Instancersのプロトタイプを指定することができます。
この欠点は、Point Instancersはパイプラインで何かを処理する場合の柔軟性が非常に低いことです。 個々のPoint Instancerインスタンスを親子化するには、余計な作業が必要になり、個々のインスタンスへの変更は、そのスキーマから利用可能なアトリビュートに制限されています。 さらに、いくつもの固有なプロトタイプを使用することができるものの、あまりにもプロトタイプが多すぎると、Point Instancersを使用することによるパフォーマンスのメリットを相殺しかねないです。
LOPsでは、便宜的にPoint InstancersとNative Instancesを使って動作するLOPをいくつか用意しています:
-
Instance Variation - VEXスニペットを使ってインスタンスタンス別にプロパティをランダム化します。
-
Instance Retime - プロトタイプの時間を変更します。
-
Instance Extract - インスタンスを抽出して昇格させます。
-
Instance Transform - 個々のインスタンスを手動編集することができます。
Instancing(インスタンス化)も参照してください。
Prim(プリム)
Primとは、USDのプライマリコンテナオブジェクトのことです。
Primには、メッシュ、ライト、カメラ、シェーダなどのいくつかのタイプがあります(USDでは、これらのタイプのことをスキーマと呼んでいます)。 各スキーマは、各Primタイプが対応するプロパティのすべてを定義します。
Primsに他のPrimsを格納することで、ステージ上に"ネームスペース階層"を作成することができ、さらに、それらのPrimsには意味的なデータを保持したプロパティを格納することもできます。 Primsは、それらを関連付けて計算されたインデックスと一緒に、ステージがメモリ内に保持する唯一の持続シーングラフオブジェクトです。 Primsに作用するAPIは、UsdPrimクラスで用意されています。
Note
HOUDINI NOTE: 上記の説明だと、USDの"Prim"とHoudiniの"Primitive"は明らかに同じではありません。HoudiniのPrimitiveはレンダリング可能な最も単純な要素です(補足すると、Houdiniのポイントはレンダリング可能ですが、プリミティブではありません)。 例えば、これは1枚のポリゴンで球、1本のライン、さらには"プリミティブ球"を表現することができます。
PrimSpec(プリムスペック)
PrimStack(プリムスタック)
Primvar(プリミティブ変数)
Primvarは、PixarのRenderman用語に由来し、"Primitive variable"の略です。 Houdiniで言うと、 Primvarはジオメトリアトリビュートと等価です 。 ジオメトリアトリビュートと同様に、Primvarsはポイント単位、プリミティブ単位、頂点単位などで値を持つことができます。 もちろん、HoudiniとUSDでは、補間の方法によって、その呼び方が異なります。
Houdini |
USD |
---|---|
Pointアトリビュート |
頂点補間をするUSD Primvar |
Vertexアトリビュート |
Face-Varying(フェース可変)補間をするUSD Primvar |
Primitiveアトリビュート |
Uniform(ユニフォーム)補間をするUSD Primvar |
Detailアトリビュート |
Constant(一定)補間をするUSD Primvar |
Primvarの識別には2つの重要な特徴があります:
-
Primvarは、それが定義されたプリミティブ上で、上記の補間の方法に基づいて値を定義します(これはHoudiniのアトリビュートと同様です)。
-
PrimvarはPrim上にまとめて取り込んで、そのPrimvarには、そのPrimにバインドされているシェーダ(s)に対する"プリミティブ単位のオーバーライド"を記述します(これもHoudiniと同様です)。
Note
HOUDINI NOTE: 繰り返しになりますが、Primvarはジオメトリアトリビュートと等価です。
Property(プロパティ)
プロパティとは、USDのもう1種類のネームスペースオブジェクトです(Primが最初のネームスペースオブジェクトです)。 Primは合成されたシーンの構成とインデックス化を提供するのに対して、Propertyには"実際のデータ"が含まれています。
Primのプロパティには、アトリビュートとリレーションシップの2つのタイプがあります。
PropertySpec(プロパティスペック)
PropertyStack(プロパティスタック)
Prototype(プロトタイプ)
ポイントインスタンサーも参照してください。
Proxy(プロキシ)
PseudoRoot(疑似ルート)
Purpose(目的)
References(リファレンス)
Referenceは、よく使用するコンポジションアークの1つで、通常ではこれを使ってアセットとプロップをステージ内に合成します(例えば、セットにアセットを組むとき)。 Sublayerとは違って、Referenceはシーングラフ内の特定のPrimパス(ネームスペース)内に合成されます。
Referenceの主な用途は、小さな単位のシーン記述を大きな集合体に合成し、Referenceのターゲットであるシーン記述を合成して"カプセル化"した結果を含んだネームスペースを構築することです。
Referenceは、見た目はインスタンスかもしれませんが、実際はインスタンス化されていません。 Primをinstanceable(インスタンス化可能)として宣言すれば、USDは各インスタンス間でそれらのPrimsを最適化して共有するようにします。 しかし、インスタンスReferenceは、インスタンスルート下のPrimsに対して固有のオーバーライドを持つことができません。
Referenceは、シーン記述をコンパクトに再利用するための1種の"マクロ"と考えてください。 Referenceは、例えば本棚に本をしまう際に使用します。 本棚と本は、それぞれ本棚アセットと本アセットを参照します。
Referenceは、同じレイヤーファイルを1つのシーングラフ内の別々の位置に何回も読み込むことができる唯一の方法です。 対してSublayerだと、ファイルをシーングラフに何回もサブレイヤー化しても、その結果は、そのファイルを一度サブレイヤーに追加するのと変わりません(そもそも実際には、同じファイルを何回もサブレイヤー化するのは許可されていませんが)。 しかし、ファイルは、多くの異なるシーングラフ位置に何回も参照することはできます。
Reference LOPとStage Manager LOPは、Referenceを作成します。 Graft LOPは、Rerefenceに似た処理をしますが、Referenceを作成するのではなくて、参照したシーングラフデータを実際にメインシーングラフにコピーします。 つまり、Graft LOPは"ハード"参照と考えることができます。 Graft LOPはディスク上のファイルを参照しないという点において、Referenceとは異なります。 LOPsで編集された他のシーングラフをGraft(接ぎ木)することしかできません。
Relationship(リレーションシップ)
リレーションシップとは、シーン内のプリミティブまたはプロパティのことを指します。
プロパティも参照してください。
Root LayerStack(ルートレイヤースタック)
Schema(スキーマ)
Primsはスキーマで定義されたタイプに分類されます。 スキームの例を挙げると、メッシュ、ライト、カメラ、シェーダなどがあります。 各スキーマは、各Primタイプが対応するプロパティのすべてを定義します。 独自のスキーマを作成することができますが、おそらくUSDに同梱されているスキーマで十分です。
APIスキーマも参照してください。
Session Layer(セッションレイヤー)
(LOPs以外の)ほとんどのUSD編集アプリケーションは、セッションレイヤー上で動作します。 これは、ステージを支えるファイルに含まれているデータを設定、オーバーライド、実験するための一種の"スクラッチ空間"です。
それとは対照的に、LOPsは常にステージ上の一番強いレイヤー上で動作します。 ディスクから(ReferenceまたはSublayerで)レイヤーを読み込むと、それを読み込んだLOPは、ディスクから読み込んだレイヤーよりも強いレイヤーを持ちます。 それより下流の各LOPは、ノードグラフ内で新しいレイヤーを宣言しない限りは、この一番強いレイヤー上で動作します。
Scene Viewerで使用されるセッションレイヤーとセッションステージなるものが存在しますが、そこに最終的に現在残る編集は、Scene Graph Treeを介して設定されたアクティブ/可視性のオピニオンだけです。
Specializes(特別化)
Inherits(継承)に似ていますが、ベースプリミティブの特別化を改良することができるように設計されています。
Specifier(指定子)
Stage(ステージ)
USDのシーンのことをステージと呼び、単にファイルを読み込むのではなくて、USDはステージを合成します。 Houdiniでは、これを従来どおり"シーン"と呼ぶことにします。
稀なケースですが、ステージ全体を単一の平坦なファイルに保存することがあります。
通常では、少なくとも2,3枚のレイヤー(ディスク上の各.usd/.usda/.usdc
ファイル)が存在し、これらのレイヤーがまとめて合成されて、ユーザー側に完全なシーングラフのビューを表示します。
合成されたステージは、Primsの階層になっていて、モデル、キャラクタ、プロップなどのすべてを表現します。
Stage Manager(ステージマネージャ)
これは、ディスクからアセットを参照し、それらのアセットを3D空間でトランスフォームさせて、シーン階層を調整するといった事を一箇所で制御できるように設計された非常に便利なユーティリティLOPです。 このLOPは、独自にQtインターフェースとPythonステートを使ってUX部分を管理していますが、このノード自体がプリミティブを作成、移動、コピー、削除することができます。
Stage Managerは、入力のレイヤーを1枚のレイヤーに平坦化するので、どの入力に対してもそれらのオペレーションを実行することができます。 しかし、この機能を使用すると、レイヤースタック内のすべてのレイヤーが結合されるので、軽く処理できるようなものではありません。
Stage Traversal(ステージ走査)
Subcomponent(サブコンポーネント)
Sublayers(サブレイヤー)
レイヤーは、強い順で複数のサブレイヤーを持つことができます。 レイヤーとサブレイヤーのこのリストのことをLayerStackと呼びます。
Target Patterns(ターゲットパターン)
TimeCode(タイムコード)
TimeSample(タイムサンプル)
Type(型)
Typed Schema(型決めスキーマ)
USD
Universal Scene Descriptionとは、3Dアセットとシーンを効率的に構築しコラボレーションするためのオープンソースのシーン記述のことです。 USDは、シーングラフを記述したファイルフォーマットです。 Houdiniでは、これをLOPsで実装しています。 LOPsを介してUSDを使用することで、複数のユーザー/部署が同じシーン上で非破壊的に作業をすることができます。 USDは、スタジオのパイプライン向けフレームワークだけでなく、ステージ(シーン)の構築、表示、検査、編集を高速且つ効率的に行なうことができる実際のインフラを提供します。 USDは、Photoshopのようなアプリケーションのレイヤーに非常に似た合成可能なレイヤーで動作します。
usdview
USD用語ではありませんが、これはUSDファイルを検査するのに非常に便利なツールです。 これは、オープンソースUSDライブラリのスタンドアローンツールです。
このツールを使用することで、Hydraビューポートでステージを視覚的に検査したり、アニメーションを再生したり、プロパティとメタデータを検査したり、さらには、バリアントやプロトタイプを切り替えたり、シーンをデバッグすることができます。
User Properties(ユーザープロパティ)
Value Clips(値クリップ)
Value Resolution(値解決)
Value Resolutionとは、プロパティ/メタデータの最終値をすべての様々なオピニオンから"構成"させるアルゴリズムのことです。 つまり、Value Resolutionは、潜在的に多くのデータを合成して単一値を生成します。
これは説明が複雑になるので、詳細はUSDのValue Resolutionのドキュメントを参照してください。
Variability(可変性)
Variant(バリアント)
Variant Set(バリアントセット)
VariantSetには、ユーザー(または工程)側で選択可能な個々のバリアントを含んでいます。 例えば、"tree" VariantSetがあって、そのセットの中に10本の異なる木(バリアント)が設定されているとします。 ユーザーは、使用したい木をそのバリアントセットの中から選択することができます。
Houdiniでは、サブネットの中で異なる木を読み込む色々なノードをSwitch SOPに接続して、そのスイッチコントロールをプロモートさせたデジタルアセットと考えることができます。
バリアントは、それが格納可能な要素について何も制限はなく、バリアントセットは単にマテリアルを入れ替えたり、階層全体を変更することができます(バリアントレイヤーを参照)。 バリアントセットは、アセット上で定義する必要はなく、下流のノードで取り込むことができます。
バリアントは、そのバリアントセットを所有するPrimまでのネームスペースを変更せずに動作す(そのため、ライトリンク、または、シーン内の本のインスタンス毎のトランスフォームが維持されます)。
Viewport Load Masks
ビューポートステージは、データの読み込みを制御できるように色々なUSDメソッドを設定することができます。 これは、ビューポート内に実際に読み込んで表示したい非常に大きなシーンの一部を選択することができます。 これらの色々な機能のことをまとめてLOPsでは"Load Masks"と呼びます。 Load Masksは、読み込みたいペイロードを選択したり、ステージに追加したいレイヤーのマスクを設定したり、レイヤーをミュートする機能を含みます。 これらの各機能の説明は、USDのドキュメントを参照してください。
Viewport Overrides
ビューポートステージは、アクティブ、可視性、描画モードなどのUSDプリミティブの特徴に対するオピニオンを設定できるようにするために、セッションレイヤーに修正を加えることができます。 セッションレイヤー内のオピニオンは、ルートレイヤーまたはサブレイヤーのオピニオンよりも強いです。 これらのオーバーライドは、主にScene Graph Treeペインで制御しますが、Pythonスクリプトでも変更することができます。
Viewport Stage
各LOPビューアは、各自のステージを持っています。これが実際にビューポートに表示されるステージです。 このステージは、ディスプレイフラグが設定されたノードのLOPステージのコピーとして生成されます。 各ビューアが各自のステージを持っている理由の説明は、パフォーマンスの考察のセクションを参照してください。
Visibility(可視性)
可視性とアクティブ化は同様の概念です。 (アクティブ化と同様に)可視性は子Primsに影響します。 つまり、不可視のPrimの子Primsを可視にすることはできません(非アクティブのPrimorの子Primsをアクティブにすることはできません)。
LOPsでは、"Configure Primitives LOP"または"Prune LOP"を使用して可視性を設定します。
VEX
USDでのVEXの使い方を参照してください。
Volume(ボリューム)
USDでは、基本的に"volume"は名前の付いた"フィールド(s)"一式のことで、ユニットとしてまとめてレンダリングされます。
そのため、Volume Primの/campsite/fire
は、/campsite/fire/density
で見つかった"density"という名前のフィールドと/campsite/fire/temp
で見つかった"temperature"という名前のフィールドで構成されたものと言えます。
これらのフィールドのそれぞれが、SOPsの単一ボリュームまたはVDBプリミティブに相当します。