hou.CopNode.vdbを介してCOPにジオメトリを要求すると、そのCOPがクックされ、読み込み専用のhou.NanoVDBが取得されます。
SOPやGeometryオブジェクトとは異なり、その結果はもはやCOPノードに紐づいていないため、そのCOPを再クックしたり削除しも、その結果は変わりません。
NanoVDBを編集したいのであれば、hou.NanoVDB.freezeをコールしてください。 これは、独立した書き込み可能なコピーである別のNanoVDBオブジェクトを返します。 フリーズされたVDBへの書き込みは、以前の読み込み専用バージョンには影響しません。
メソッド ¶
close()
このオブジェクトを空っぽのオブジェクトにリセットします。
これによって、大元のNanoVDBデータの参照が解放されます。
このオブジェクトは、スコープを抜けてガベージコレクションされる際にも同様にリセットされますが、close()を使用することで、そのタイミングを正確に制御することができます。
NanoVDBはPythonのコンテキストマネージャにも対応しているので、withステートメントを使用することで、withブロックの終了時にNanoVDBを自動で閉じることができます。
vdbType()
→ hou.EnumValue
VDBのタイプを返します。 このタイプは、データの精度、浮動小数点または整数のどれかの型、ベクトルのサイズで構成されています。
typeInfo()
→ hou.EnumValue
VDBのセマンティックタイプを返します。 これは、自動可視化などの用途に使用されます。
setTypeInfo(storagetype)
VDBのセマンティックタイプを変更します。
書き込み可能なVDBが必要です。
leafCount()
→ int64
VDB内のアクティブなリーフノードの数を返します。 リーフノードが完全にアクティブな場合、アクティブなボクセルの数は、この値の512倍になります。
onCPU()
→ bool
NanoVDBは、CPUまたはGPUのどちらにも格納することができます。 CPU上に格納されている場合、これはTrueとなります。
onGPU()
→ bool
NanoVDBは、CPUまたはGPUのどちらにも格納することができます。 GPU上に格納されている場合、これはTrueとなります。
voxelSize()
→ hou.Vector3
VDB内のボクセルのワールド空間サイズ。
indexToWorldTransform()
→ hou.Matrix4
ボクセルインデックスからワールド空間へのトランスフォーム。
Note
これにはテーパーが考慮されていません。
worldToIndexTransform()
→ hou.Matrix4
ワールド空間からボクセルインデックスへのトランスフォーム。
Note
これにはテーパーが考慮されていません。
freeze()
→ hou.NanoVDB
このVDBの書き込み可能なコピーを作成して、それを返します。
Note
実際のバッファの複製は、書き込みが行なわれるまで実行されません。
isFrozen()
→ bool
このVDBがフリーズされているかどうかを返します。 Falseの場合、このVDBは書き込み不可です。
attributes()
→ std::map<std::string,hboost::any>
このVDBに存在するVDBアトリビュートを返します。
setAttributes(std::map<std::string, p)
VDBアトリビュートを、指定した辞書の内容で置き換えます。
updateAttributes(std::map<std::string, p)
指定した辞書を用いてVDBアトリビュートを更新し、マッチしたキーを置換します。
rawNanoVDB()
→ hou.BinaryString
すべてのボクセルをバイナリ文字列として返します。 これはNanoVDBのメモリレイアウトに準拠しているので、NanoVDBに対応したサードパーティ製ツールで再解釈することができます。
Note
NanoVDBは長期保存用のフォーマットとして設計されていないため、長期保存を行なう場合は、このフォーマットが将来も変わらないことを前提とするのではなく、VDBを使用することを推奨します。
setFromRawNanoVDB(values, length)
valuesに格納されたバイナリ文字列を受け取って、このNanoVDBをそのエンコードされたNanoVDBに置き換えます。