コンテンツにスキップ

AttributeにPrimvarを指定する

ipynbFile USDPrimvar__AttributeにPrimvarを指定する.ipynb

In [116]:

1
from pxr import Usd,UsdGeom,Sdf,Vt

In [117]:

1
stage = Usd.Stage.CreateInMemory()

In [118]:

1
prim = stage.DefinePrim("/testPrim")

In [119]:

1
attr = prim.CreateAttribute('hoge',Sdf.ValueTypeNames.Float)

In [120]:

1
2
3
4
# Attributeに対してPrimvarを設定
primvar = UsdGeom.Primvar(attr)
# 補間方法 constant/uniform/varying/vertex/faceVarying
primvar.SetInterpolation(UsdGeom.Tokens.varying)

Success

1
True

In [121]:

1
2
primvar.Set(100,Usd.TimeCode(180))
primvar.Set(120,Usd.TimeCode(181))

Success

1
True

In [122]:

1
print(stage.GetRootLayer().ExportToString())

Success

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#usda 1.0

def "testPrim"
{
    custom float hoge (
        interpolation = "varying"
    )
    float hoge.timeSamples = {
        180: 100,
        181: 120,
    }
}

In [123]:

1
primvar.Get(180.8)

Success

1
116.0

In [124]:

1
2
# IndexなしならGetとComputeFlattenedは同じになる?
primvar.ComputeFlattened(Usd.TimeCode(180.8))

Success

1
116.0

PrimvarのGetは、TimeCodeでセットした値をバイリニア補間してくれる
(補間方法について) * https://imagingsolution.net/imaging/interpolation/