Q100358: Geolib3 クライアントを使用して Python 経由でシーン グラフの場所の属性を照会し、変更を検査して対応する方法

まとめ

この記事では、位置属性などのシーングラフ データを Python を使用して生成およびクエリする方法について説明します。

詳細情報

ユーザーは、シーングラフ上の位置にある属性の値を照会するPythonスクリプトを作成したい場合があります。これを実現するには、まずシーンをクックする必要があります。クックとはシーングラフの評価を表し、シーンデータを計算するためにノードグラフを評価する必要があります。このステップが実行されない場合、属性データは存在せず、照会できません。

これは、シーンデータの生成をリクエストできるGeolib3クライアントを作成することで実現できます。以下の例をご覧ください

# We first need to get a hold of the runtime the UI is using
runtime = FnGeolib.GetRegisteredRuntimeInstance()

# Transactions are used to batch together actions
txn = runtime.createTransaction()

# Make a client, and attach it to an Op in the tree, we get the Op from a reference to a Node.
client = txn.createClient()
op = Nodes3DAPI.GetOp(txn, NodegraphAPI.GetNode('Render'))
txn.setClientOp(client, op)

# Commit the transaction to the runtime, if we don't the client will exist, but won't yet be pointing to an Op
runtime.commit(txn)

次に、クライアントを使用して場所をクックし、その属性値を検査します。たとえば、カメラの場所のcenterOfInterest属性を取得します。

location = client.cookLocation('/root/world/cam/camera')
attrs = location.getAttrs()
COI = attrs.getChildByName('geometry.centerOfInterest')
print(COI.getValue())

Geolib3 および Op API の詳細については、 Katanaユーザー ガイドの Op API セクションを参照してください。

シーングラフのクッキングは計算コストが高くなる可能性があることに注意してください。不要なクッキングを避けるよう特に注意する必要があります。例えば、ノードグラフの変更ごとに自動的にクッキングを行うことは推奨されませんが、ボタンスクリプトなどのユーザートリガーイベントでクッキングを行うことは問題ありません。

望ましいワークフローを実現するために、多くの作業が必要だと感じた場合は、OpまたはOpScriptsを用いた別のアプローチを検討してください。多くのワークフローは、問題をいくつかのOpに分割し、それらを連携させることで実現できます。

さらなる支援

引き続きレンダリングの問題が発生している場合は、サポートチケットを開き、発生している問題とこれまでに行ったトラブルシューティング手順をお知らせください。また、 Q100520「 Foundryサポート調査時に送信するためのハードウェア仕様に関するオペレーティングシステムレポートの取得」に記載されているシステム情報もお知らせください。

サポート チケットを開く方法の詳細については、 「Q100064: サポート チケットの発行方法」の記事を参照してください。

    私たちはそれを聞いて申し訳ございません

    理由をお聞かせください