Houdini 18.0 ノード LOPノード

Python Script

このノード内にUSD APIを使ってPythonコードを記述することで、ステージを直接制御することができます。

On this page

概要

LOPノードを使って表現するのが難しい技術的タスクまたは統合タスクには、このノードを使用してUSD APIのフルパワーを使ってシーングラフツリーを読み込んで修正したり、HOMのパワーを使って残りのHoudiniにアクセスしてコントロールすることができます。もちろん、Pythonとそのライブラリのフルパワーを使って外部データにアクセスしてパイプラインや他のシステムに統合することもできます。

このノードは、独自のパイプライン固有のタスクをスクリプト化するのに役立つ事が多いです。

APIのヘルプはPixarのPython APIチュートリアルを参照してください。

ステージのスクリプト化

  • hou.pwd()をコールすることで、このノードの参照をhou.Nodeとして取得することができます。 この参照を介して現行ステージ 取得することができます(以下参照)。 さらには、この参照を使ってこのノードに追加されているSpareパラメータにアクセスすることができます。

  • hou.pwd().editableStage()をコールすることで、編集可能なpxr.Usd.Stageオブジェクトを取得することができます。 このオブジェクトは、このノードの出力(APIによって加えられた変更を含みます)を表現しています。

    (USD Edit Targetは自動的にアクティブレイヤーに設定されます。 このEdit Targetを変更しないでください 。変更してしまうと予期しない間違った結果を招いてしまいます。)

サンプル

ステージに新しいPrimsを追加する。

stage = hou.pwd().editableStage()
xform = stage.DefinePrim('/shapes', 'Xform')
cube = stage.DefinePrim('/shapes/cube1', 'Cube')

シーングラフツリー内のすべてのPrimをループする。

stage = hou.pwd().editableStage()
for prim in stage.Traverse():
    # Access or edit the prim
    pass

USDのハイレベルAPIsを使って複雑なアトリビュートを制御する。

from pxr import UsdGeom

stage = hou.pwd().editableStage()
cube = stage.GetPrimAtPath("/shapes/cube1")

# アトリビュートを直接変更する。
cube.GetAttribute("size").Set(1.5)

# APIsは便利なショートカットを持つことができます。
cube_api = UsdGeom.Cube(cube)
color = cube_api.GetDisplayColorAttr()
color.Set([(0, 0, 1.0)])

# マトリックスアトリビュートを直接いじることなくXformCommonAPIを使ってトランスフォームを制御することができます。
UsdGeom.XformCommonAPI(cube).SetTranslate((4, 5, 6))

すべてのライトをループさせて、ライトの露出をライトの強度にコピーし、その露出をクリアする。

from pxr import UsdLux

stage = hou.pwd().editableStage()

# UsdLuxには、シーン内のすべてのライトを効率的に検索するための特別なAPIが用意されています。
api = UsdLux.ListAPI(stage.GetPseudoRoot())
for lightprim in light api.ComputeLightList():
    exposure_attr = lightprim.GetAttribute("exposure")
    intensity_attr = lightprim.GetAttribute("intensity")

    intensity = intensity_attr.Get()
    exposure = exposure_attr.Get()
    if exposure:
        intensity_attr.Set(intensity * (exposure ** 2))
        exposure_attr.Set(0)

hou.LopSelectionRuleを使って、すべてのライトの強度を現行値の半分にする。

node = hou.pwd()

# まず最初に、入力上のすべてのライトPrimsを検索します。
# 入力ノードの重い再クックを回避するために、編集可能ステージを取得する前に、これをする必要があります。
ls = hou.LopSelectionRule()
ls.setPathPattern('{ usd_istype(0, @primpath, "UsdLuxLight") }')
paths = ls.expandedPaths(node.inputs()[0])

# これで一連のPrimパスが取得できたので、編集可能ステージを取得して変更を加えることができます。
stage = node.editableStage()
for path in paths:
    prim = stage.GetPrimAtPath(path)
    intensity = prim.GetAttribute('intensity')
    intensity.Set(intensity.Get() * 0.5)

他のAPIでアクティブレイヤーをスクリプト化する

  • Usd APIsを使ってステージを制御する 代わりに 、ローレベルのSdf APIsを使ってアクティブレイヤーを編集することができます。 同じスクリプト内で両方の処理を制御することはできません。

  • ローレベルAPIsの方を好む理由があれば、おそらくアクティブレイヤーだけをスクリプト化したいことでしょう。 pxr.Usdメソッドは、非常に使い勝手の良いハイレベルメソッドです。 pxr.Usdメソッドは、エラーチェックやデータの有効性を実行する処理が多いです。 しかし、pxr.Sdf APIsは劇的に高速で、特に新しいUSD Primsを作成する時がそうです。

  • アクティブレイヤーの編集可能なpxr.Sdf.Layer参照を取得したいのであれば、hou.pwd().editableLayer()をコールします。 これをコールした場合、同じスクリプト内でhou.pwd().editableStage()もコール しないでください

Tips

  • コードを編集する時、このノードは、エディタ外をクリックまたはAlt + Enterを押した時にクックします。

  • このノード上にSpareパラメータを追加することで、このノードにグラフィカルインターフェースを追加することができます。 例えば、Primパスを受け取るprimpathという名前のテキストボックスを追加することができます。 これによって、スクリプト内でそのパラメータ値にアクセスすることができます:

    node = hou.pwd()
    primpath = node.evalString("primpath")
    
  • 作成した便利なPython Scriptノードを共有したい場合、そのノードインスタンスをLOPデジタルアセットに変換することができます。 ネットワークエディタ内でそのノードを右クリックして、 Create Digital Asset を選択します。 このスクリプトがデジタルアセットの一部として格納され、このノードも同じように動作しますが、共有とバージョン管理が可能なアセットとして機能します。

  • エディタの右側にあるポップアップメニューボタンは、Houdiniパス内のPythonScripts.txtファイルからスニペットを取り込みます。 $HOUDINI_USER_PREFS_DIR/PythonScripts.txtファイルを作成し、そのテキストにスニペットを追加すれば、このメニューにそれらのスニペットが表示されます。 $HFS/houdini/PythonScripts.txtを読んで、必要なファイル形式を確認してください。

  • スクリプトで"何とかのPrimsすべてを検索"する必要がある場合、USDの走査系メソッドを使用するよりも、hou.LopSelectionRuleを使用することを考慮してください。 hou.LopSelectionRuleオブジェクトは、HoudiniのUSDプリミティブパターンマッチを実装しています。 このオブジェクトはパス文字列のリストを生成します。 stage.GetPrimAtPath(pathstring)を使用することで、パス文字列からPrimオブジェクトに変換することができます。 この手法を使用すると、現行ノードではなくて、入力ノード上の選択ルールが評価されるので、再帰エラーが回避されます。 他にも、入力ステージの重い複製を回避するために、このノードの編集可能ステージを取得する前に選択ルールを評価してください。

パラメータ

Python Code

このノードをクックする時に実行するPythonコード。Tipsとサンプルは上記のメインヘルプを参照してください。

LOPノード

  • Add Variant

    Prim上のバリアントセットに1つ以上のバリアントを追加します。このノードは、そのPrimが存在しなければ、そのPrimを作成します。

  • Additional Render Vars

    複数のRender Varsを作成します。

  • Assign Material

    1つ以上のUSD Primsにマテリアルを割り当てます。VEXを使用することで、プログラム的にマテリアルを割り当てたり、プログラム的に割り当て毎にマテリアル設定をオーバーライドしたり、プログラム的にジオメトリサブセットにマテリアルを割り当てることもできます。

  • Attribute VOP

    VOPネットワークを使ってUSDアトリビュート値を作成/編集します。

  • Attribute Wrangle

    VEXスニペットを使ってUSD Primアトリビュートを作成/編集します。

  • Auto Select LOD

    カメラからPrimまでの距離に基づいて自動的にLODバリアントを選択します。

  • Bake Skinning

    "UsdSkelで駆動されたアニメーションをトランスフォームとポイントポジションにベイクします。

  • Begin Context Options Block

    このノードは、LOPノード群のブロックを開始します。このブロック内では特定のコンテキストオプションが特定の値を持ちます。

  • Blend

    小数点ウェイトに基づいてレイヤーのアトリビュートに部分的に編集を適用します。

  • Cache

    異なる時間におけるネットワークのクック結果をキャッシュ化することで、再生パフォーマンスを上げます。

  • Camera

    シーンにUSDカメラを追加します。

  • Capsule

    カプセル(開口部を半球で閉じたチューブ)形状Primを作成/編集します。

  • Collection

    選択したPrimsを使ってコレクションを作成/編集します。

  • Cone

    円錐形状Primを作成/編集します。

  • Configure Layer

    レイヤー上のメタデータを編集します。

  • Configure Primitives

    1つ以上のPrim上の色々なメタデータを編集します。

  • Configure Properties

    プロパティ(リレーションシップとアトリビュート)上のメタデータを修正します。

  • Configure Stage

    レイヤーをステージとAsset Resolutionに読み込むための方法を示したメタデータを修正します。

  • Create LOD

    PolyReduce SOPを使って高解像度モデルから複数のLODを自動的に生成し、それらのLODをUSDバリアントとして保存します。

  • Cube

    キューブ形状Primを作成/編集します。

  • Cylinder

    シリンダー形状Primを作成/編集します。

  • Dome Light

    USD Dome Light Primを作成/編集します。ドームライトは光を 内側 に放射して、シーンを囲んだ空/環境からの入射光を模倣します。

  • Drop

    重量によるPrimsの落下シミュレーションを実行します。

  • Duplicate

    Prim(とその子孫)のコピーを作成します。

  • Edit

    ビューア内でインタラクティブにPrimsをトランスフォームさせます。物理衝突を使用して、プロップを現実的に配置することができます。

  • Edit Context Options

  • Edit Material

    パラメータやシェーダ接続を変更することで既存のUSDマテリアルを編集することができます。これは、既存マテリアルが編集不可なレイヤーの場合に役立ちます。

  • Edit Properties

    アトリビュート値とリレーションシップ値を直接編集するためのSpareパラメータインターフェースを構築することができます。

  • Edit Prototype

    ポイントインスタンスまたはUSDインスタンス可能Primが別のプロトタイプをインスタンス化するように切り替えます。

  • Edit Target Layer

    アクティブレイヤー内のPrimsとアトリビュートをオーバーライドするのではなく、下位レイヤーで直接編集を適用することができます。

  • Error

    親アセット上で表示可能なメッセージ、警告、エラーを生成します。

  • Extract Instances

    インスタンスを"実際に"編集可能なPrimに変換します。

  • Fetch

    他のLOP(他のLOPネットワーク内のLOPも可能)の出力を取得します。

  • Follow Path Constraint

    Primがパスカーブに追従するように拘束します。

  • For Each

    For-Eachループブロックの終了ノード。

  • Geometry Subset VOP

    VEXpressionまたはVOPネットワークの評価に基づいて(SOPのグループと同様に)ジオメトリPrims内にUSDジオメトリサブセットを作成します。

  • Graft

    他の入力からシーングラフツリーを受け取り、それらのツリーを1番目の入力のシーングラフツリーのブランチに取り付けます。

  • Inline USD

    レイヤーを表現したusdaコードを解読し、そのレイヤーをレイヤースタックに追加します。

  • Instancer

    ポイント上にPrimsをインスタンス化またはコピーします。

  • Karma Procedural

    Karma向けにレンダリング時にインスタンス化される仕組みをセットアップします。

  • Karma Render Properties

    Karma(ベータ)用レンダープロパティを構成します。

  • Karma Standard Render Vars

    標準Karma Render Vars(AOVs/Image Planes)を作成します。

  • LOPノード

    LOPノードは、キャラクタ、プロップ、ライティング、レンダリングを記述したUSDを生成します。

  • Layer Break

    このノードより下流のノードで編集をするための新しいアクティブサブレイヤーを開始します。

  • Layer Replace

    特定のレイヤー内のすべての用途を2番目の入力の代替レイヤーに置換します。

  • Light

    USD Light Primを作成/編集します。このノードは、Karma固有のいくつかの便利アトリビュートも追加します。

  • Light Linker

    ルールに基づいてUSDライトリンクプロパティを作成します。

  • Light Mixer

    複数のライトに対してUSDプロパティをインタラクティブに編集することができます。

  • Load Layer

  • Look At Constraint

    Primがターゲットの方へ常に向くように拘束します。

  • Material Library

    Material VOPノードをUSDマテリアルPrimsとして取り込みます。

  • Material Linker

    ルールに基づいてマテリアルの割り当てを作成します。

  • Material Variation

    Prim/インスタンス単位でマテリアルパラメータをオーバーライドするためのアトリビュート/Primvarsを作成します。

  • Merge LOP

    入力ステージのレイヤー(s)をレイヤースタックに1本化します。

  • Modify Point Instances

    個々のポイントインスタンスに対してポイントトランスフォームとポイントプロパティ値を変更します。

  • Null

    このノードは何もしません。ネットワーク内の"固定位置"としてNullをネットワークに挿入することで、エクスプレッション/スクリプト内で名前によってその位置を参照するのに役立ちます。

  • Output

    サブネットワークの出力を表現します。複数の出力を使ってノードアセットを設計することができます。

  • Parent Constraint

    ツリー内のどこかの他のPrimのトランスフォーム階層をPrimに継承させたようにします。

  • Points Constraint

    ジオメトリのポイントポジションを使ってPrimsの位置と向きを拘束します。

  • Primitive

    特定のタイプの複数のアトリビュートを一括で作成します。

  • Prune

    Primsやポイントインスタンスを非表示または非アクティブにします。

  • Python Script

    このノード内にUSD APIを使ってPythonコードを記述することで、ステージを直接制御することができます。

  • Reference

    外部USDファイルの内容を既存シーングラフツリーのブランチで参照したり、既存の参照を削除/置換します。

  • Render Geometry Settings

    シーングラフ内のジオメトリにレンダラー固有のジオメトリ設定を適用します。

  • Render Product

    UsdRenderProduct Primを作成/編集します。このPrimは、そのRender Productの生成方法を指定したアトリビュートと共にレンダラーの出力(レンダリング画像またはレンダラーが生成した他のファイルなどの中間生成物)を表現します。

  • Render Settings

    UsdRenderSettings Primを作成/編集します。このPrimには、シーンをレンダリングするための全般的な設定を格納します。

  • Render Var

    レンダラー/シェーダで計算されるカスタム変数のシェーダ出力やLight Path Expression(LPE)を指定します。

  • Retime Instances

    選択したインスタンス上のアニメーションのタイミングをオフセット/スケールさせます。

  • SOP Create

    このノード内部のSOPネットワーク内でジオメトリを作成することができるので、別にSOPネットワークを用意することなくLOPネットワーク内のその場でジオメトリを作成することができます。

  • SOP Import

    SOPネットワークのジオメトリをUSDシーングラフに取り込みます。

  • SOP Modify

    USDジオメトリをSOPジオメトリに変換し、そのジオメトリに対してこのノード内部のSOPサブネットを実行し、その結果をUSDオーバーライドに戻します。

  • Scene Import

    Objectレベルのモデル、マテリアル、ライトをLOPネットワークに取り込みます。

  • Scope

    Scope Primを作成します。Scopeとは最も単純なグループ化の形式であり、トランスフォームを持ちません。Scopeはシーンツリーを整理するのに役立ちます。

  • Set Extents

    選択したPrimsの境界ボックスメタデータを設定します。

  • Set Variant

    Prim上のバリアントセットに格納されているどれかのバリアントを選択(切り替え)します。

  • Simulation Proxy

    物理シミュレーションに適した低解像度ポリゴン衝突ジオメトリを生成し、オリジナルモデルに対してプロキシリレーションシップを作成します。

  • Sphere

    球形状Primを作成/編集します。

  • Stage Manager

    一度に多くのファイルを参照して、それらをシーングラフツリー内に配置するための便利インターフェースを備えています。

  • Store Parameter Values

    ステージ内の一時的な(保存されていない)データを格納することができます。

  • Sublayer

    USDファイルまたは他のLOPノードチェーンをサブレイヤーとして取り込んだり、既存のサブレイヤーを削除/置換/並べ替えします。

  • Subnet

    LOPサブネットワークをカプセル化することで、一部のネットワークを整理して隠すことができます。

  • Surface Constraint

    Primがサーフェスに引っ付くように拘束します。

  • Switch

    パラメータ選択またはエクスプレッションに基づいて複数入力のどれかを通過させます。

  • TimeShift

    タイムラインの異なる位置におけるステージをそのまま出力します。

  • Transform

    選択したUSD Primsのトランスフォームを編集します。

  • Transform UV

    USD Prims上のテクスチャ座標を移動、回転、スケールさせます。

  • USD ROP

  • USD Render ROP

  • Value Clip

  • Vary Material Assignment

    いくつかのPrimsに対して異なるマテリアルを割り当ててバリエーションを生成します。

  • Volume

    フィールドPrimsを含んだボリュームPrimでディスク上のボリュームデータを参照します。

  • Xform

    Xform Primを作成/編集します。Xform(とそのサブクラス)はシーンツリー内のトランスフォームを表現します。