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 または OpScript を使用する別のアプローチを検討してください。多くのワークフローは、問題をいくつかの Ops が連携して分解することで実現できます。

さらに質問がある場合、または属性をクエリするための適切なワークフローを見つけるのに問題がある場合は、サポート チケットを開いて、発生している問題または達成しようとしている望ましいワークフローをお知らせください。

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

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

    理由をお聞かせください