Skip to content

USDのポイントインスタンサ

ipynbFile usd_pointinstancer__USDのポイントインスタンサ.ipynb

In [10]:

1
from pxr import Usd,UsdGeom

In [7]:

1
stage = Usd.Stage.Open("./instance_sample.usda")

In [13]:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
prim = stage.GetPrimAtPath("/addpointinstancer1")
# インスタンサを取得
pointInstancer = UsdGeom.PointInstancer(prim)

# ポイント情報を取得
positions = pointInstancer.GetPositionsAttr().Get()
protoIndices = pointInstancer.GetProtoIndicesAttr().Get()

# Prototype(PointInstancerで配置するオブジェクト)のSdfPathを取得
protoPaths = pointInstancer.GetPrototypesRel().GetTargets()

In [41]:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import json

# PointInstancerの情報を、任意の JSON のフォーマットに変換する
data = {
    "prototype":[{"fullPath":str(x),'name':str(x).split("/")[-1]} for x in protoPaths],
    "instance":[]
}

for pos,index in zip(positions,protoIndices):
    data["instance"].append({"pos":list(pos),"index":index})

with open("sample.json",'w') as f:
    json.dump(data,f,indent=2)