Primvar を 作成する
2022-08-31 #Blog #SolarisResearch #USDResearch
Primvar を作成する
USD API
code:python
from pxr import Sdf, Usd, UsdGeom
stage = Usd.Stage.CreateNew("stage.usda")
mesh: Usd.Prim = stage.DefinePrim("/mesh")
# Get PrimvarsAPI
primvarapi: UsdGeom.PrimvarsAPI = UsdGeom.PrimvarsAPI(mesh)
primvar: UsdGeom.Primvar = primvarapi.CreatePrimvar("foo", Sdf.ValueTypeNames.Float)
primvar.Set(5)
code:usda
#usda 1.0
def "mesh"
{
float primvars:foo = 5
}
pxr.UsdGeom.PrimvarsAPI.CreatePrimvar を使用する
-.icon
Solaris (VEX)
https://gyazo.com/d2e85453988767a6a7f8c66547fb3e23https://gyazo.com/2c6d31c8477b831005441ebe06187a2e
vex から作成する
code:vlf
usd_addprimvar(0, "/mesh", "foo", "float");
usd_setprimvar(0, "/mesh", "foo", 5);
usd_addprimvar VEX function
usd_setprimvar VEX function
あるいは事前に SOP で設定していた Attribute が SOP Import LOP.iconSOP Import LOP 時に primvar となる
補足
primvars は 単なる primvars: という namespace 付きの pxr.Usd.Attribute なので専用のAPIや関数を利用せずとも作れるは作れる
code:python
# Attribute から作成
attr: Usd.Attribute = mesh.CreateAttribute(
"primvars:foo", Sdf.ValueTypeNames.Float, False
)
attr.Set(5)
print(UsdGeom.Primvar.IsPrimvar(attr)) # => True
code:vlf
f@primvars:foo = 5;
が Interporation とか設定するなら シンプルに用意された専用のAPIを利用するほうがシンプルに書ける という感じ
-.icon
Solaris (Material Variation LOP)
https://gyazo.com/3cd12ff9bebd0864652a3d4cc83fc779
Material Variation LOP.iconMaterial Variation LOP を使用して, 指定Prim の PrimVar を作成/編集することが可能
https://gyazo.com/3cc422889c8068d3a871d34236f79e84https://gyazo.com/86fdd329eb7b48162b88b144c9285d5e
-.icon
Refs
Universal Scene Description: UsdGeomPrimvar Class Reference