Houdini 18.0 ノード LOPノード

Store Parameter Values

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

On this page

概要

下流ノードに渡される一部のデータを保存しておきたいことが時折あります。 例えば、あるノードでメッシュ内のポリゴン間の関係性を解析し、下流ノードが高速検索でアクセスできるようにキャッシュを生成したいことがあります。

USDには一時的な/未保存のデータストレージが用意されていません。 USDでは、データはImmutable(変更不可)であることが求められ(新しい情報をレイヤーに乗せることでしか変更ができない)、USD内のすべてのデータが保存されていることが求められます。

しかし、Houdiniでは一時的なデータを格納する必要性が出てきます(たいていの場合、In-Memoryレイヤーをディスクに書き出す場合です)。 Houdiniは、この一時的なデータを/HoudiniLayerInfo Primに格納します。 USDに書き出す時、Houdiniはこの特定のPrimをスキップ/取り除きます。

このPrimによって、ディスクに保存したくない独自のデータを(アトリビュートとして)格納するための便宜的な場所をステージ内に用意することができます。

Store Parameter Valuesノードは、このノード上のパラメータの内容(通常ではスクリプトで生成)を/HoudiniLayerInfo上のプロパティにコピーするモデルに対して動作し、下流のノードでその格納値を読み込むことで、そのパラメータの値を生成させることができます。 この理由は、ノードの名前がパラメータ値を参照しているからです。

Note

このノードは、任意の一時データを格納できるようにするための回避策です。 将来のバージョンのHoudiniでは、もっとわかりやすくして、一時データをネットワークの下流に渡すのに特化した方法を用意する予定です。

How to

To...Do this

Store Parameter Valuesノードを使って一時データを格納する

このノードは、パラメータの内容を保存することで動作します。 通常では、Pythonスクリプトを使ってパラメータの内容を生成します。

  1. Store Parameter Valuesノードのパラメータエディタで、 Name パラメータに一時データの格納先となる名前を設定します。

    この名前には、既存のプロパティ名と干渉していない有効なUSDプロパティ名を設定してください。 名前の頭に二重アンダースコアを付けることで、名前をもっと固有にすることができます。例えば、__indicesです。

  2. Name の右側にあるポップアップメニューを使って、格納したい値のUSDデータタイプを設定します。

    • おそらくintfloatdoublestringのどれかを選ぶことが多いでしょう。 もっと複雑なデータであれば、stringを選択して、そのデータをJSONとしてエンコードします(以下のTipsを参照)。

    • 配列を格納したいのであれば、USDデータタイプを"Auto"に設定します。

  3. Value パラメータを右クリックして、 Expression ▸ Change Language to Python を選択します。

  4. 再度 Value パラメータを右クリックして、 Expression ▸ Edit Expression を選択します。

    これは、フローティングマルチラインエディタを開きます。 ここでPythonエクスプレッションを作成/編集することで、そのパラメータの値を駆動させることができます。

  5. 格納したい値を返すPythonスクリプトを記述します。

    • スカラー値(int, float, double)と文字列に関しては、値を返すだけです。

    • 複合値(例えばfloat3)と配列(int[])に関しては、repr()関数を使って、値のリストの Python表現 を含んだ 文字列 を返します。

      例:

      list_of_value_to_store = [1, 2, 3, 5, 10, 15, 100]
      return repr(list_of_value_to_store)
      
    • もっと複雑なデータ(辞書や入れ子化されたデータなど)に関しては、そのデータをJSON文字列としてエンコードします(以下のTipsを参照).

格納データを使って、下流のノードでパラメータの値を設定する

格納値を使用する便利な方法は、その値を使ってパラメータ値を設定することです。

  1. 下流のノードのパラメータエディタで、その格納データを使って駆動させたいパラメータを右クリックして、 Expression ▸ Change Language to Python を選択します。

  2. 再度そのパラメータを右クリックして、 Expression ▸ Edit Expression を選択します。

  3. Pythonスクリプトでloputils.fetchParameterValues(input_node, property_name)関数を使用することで、このノードの 入力 からその格納データの値を取得することができます。 このスクリプトは、パラメータに設定したい値を返してください。

    import loputils
    
    # このノードの参照を取得します。
    this_node = hou.pwd()
    # そのノードの入力に接続されているノードの参照を取得します。
    input_node = this_node.inputs()[0]
    # 指定した名前に格納した値を取得します。
    value = loputils.fetchParameterValues(input_node, "__indices")
    
    # このスクリプトは、パラメータに設定したい値を返してください。
    # そのパラメータのデータタイプ(例えば、int,float,string)に合わせた値で返す必要があります。
    return str(value)
    

Tips

  • 文字列、スカラー値、配列よりも複雑なデータ(例えば、Python辞書)をエンコードしたいのであれば、そのデータをJSONエンコード(暗号化)して文字列に格納し、下流のノードでその文字列をJSONデコード(復元)することで、そのデータにアクセスすることができます。

    データをJSONエンコードする

    from json import dumps
    
    mydict = build_cache_dictionary()
    jsonstring = dumps(mydict)
    return jsonstring
    

    下流のノードで辞書を取得する

    from json import loads
    import loputils
    
    this_node = hou.pwd()
    input_node = node.inputs()[0]
    jsonstring = loputils.fetchParameterValues(input_node, "foo")
    mydict = loads(jsonstring)
    

    Warning

    文字列からデータを抽出する時は、Pythonのeval()関数を 決して使用しないでください 。 データはJSONで暗号化して、JSONで復元してください。

  • VEXスニペットで格納値を使用したい場合:

    • Bindings タブで格納値用のパラメータを作成します。または(このノードに Bindings タブがない場合)格納値を入れるためのSpareパラメータを作成します。

    • その新しいパラメータにPythonスクリプトを記述することで、格納値から値を取得することができます。

    • VEXスニペットでは、そのバインドしたアトリビュートを使用します(このノードに Bindings タブがある場合)。 または、Spareパラメータを作成していれば、ch()関数を使用することで、そのパラメータ値を読み込むことができます。

  • ネイティブのUSD配列では、データタイプを混在させた配列に対応していません。 "Auto"を使ってfloatやintのデータタイプが入ったリストを返しても、それらはfloat配列として格納されます。 本当にリスト内にデータタイプを混在させたいのであれば、そのリストをJSON文字列としてエンコードします。

パラメータ

Parameters

単一ノードで複数のパラメータ値を格納することができます。 格納したい値の数をここに設定するか、または、プラスとマイナスのボタンをクリックして値を追加/削除します。

Enable

値毎に、実際にその値を計算して格納するかどうかを指定します。

Name

値の格納先となるプロパティ名。 この名前には、既存のプロパティ名と干渉していない有効なUSDプロパティ名を設定してください。 名前の頭に二重アンダースコアを付けることで、名前をもっと固有にすることができます。例えば、__indicesです。

Type

格納したい値のUSDデータタイプ。 配列を格納したい場合、Typeを"Auto"に設定し、Pythonリストリテラル(例えば、[1,2,3])のような文字列を返してください。 おそらくintfloatdoublestringのどれかを選ぶことが多いでしょう。 もっと複雑なデータであれば、stringを選択して、そのデータをJSONとしてエンコードします。

Value

格納する値の文字列表現。 通常では、Pythonスクリプトを使ってこのパラメータの値を駆動させたいです(上記の"How to"を参照)。 配列を格納したいのであれば、Typeを"Auto"に設定し、ここには、Pythonリストリテラル(例えば、[1,2,3])のような文字列を設定します。

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(とそのサブクラス)はシーンツリー内のトランスフォームを表現します。