ClipsAPIの基本構造をつくる
ipynbFile UsdClipsAPI_01__ClipsAPIの基本構造をつくる.ipynb
In [13]:
In [14]:
| ROOT_PATH = "d:/work/py37/USD/clip/"
|
In [18]:
| # Clipを作る
a = Sdf.Layer.FindOrOpen(ROOT_PATH + 'clip1.usda')
b = Sdf.Layer.FindOrOpen(ROOT_PATH + 'clip2.usda')
print(a.ExportToString())
print(b.ExportToString())
|
Success
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | #usda 1.0
def "Model"
{
double a.timeSamples = {
1: 1,
}
double b = 10
}
#usda 1.0
def "Model"
{
double a.timeSamples = {
1: 1234,
}
double b.timeSamples = {
1: 10,
}
}
|
In [16]:
| # ClipのレイヤーからManifestを作る。
# Manifestは、ClipsAPIを使用するときに、クリップでアクセスアトリビュートの
# インデックスを作るためのファイル。
# ClipのうちTimeSampleを持つアトリビュートの定義を作る。
manifest = Usd.ClipsAPI.GenerateClipManifestFromLayers([a,b],'/Model')
|
In [17]:
| # 結果は、アノニマスレイヤーとして取得できるので
# このアノニマスレイヤーを保存して使用する。
print(manifest.ExportToString())
manifest.Export(ROOT_PATH + "/manifest_sample.usda")
|
Success
| #usda 1.0
over "Model"
{
double a
double b
}
|
In [7]:
| # Clipを作るためのレイヤーを用意。
stage = Usd.Stage.Open(ROOT_PATH + "stage.usda")
stage.Reload()
print(stage.GetRootLayer().ExportToString())
prim = stage.GetPrimAtPath('/TestModel')
# ClipsAPIの引数で、Clipを追加したいSdfPathを指定する
clipAPI = Usd.ClipsAPI(prim)
|
Success
| #usda 1.0
(
endTimeCode = 4
startTimeCode = 1
)
def "TestModel"
{
double a
double b
}
|
In [8]:
| # Clipのレイヤーをセット
clipAPI.SetClipAssetPaths([Sdf.AssetPath(ROOT_PATH + 'clip1.usda'),
Sdf.AssetPath(ROOT_PATH + 'clip2.usda')])
clipAPI.SetClipManifestAssetPath(Sdf.AssetPath(ROOT_PATH + 'manifest_sample.usda'),'default')
|
In [9]:
| print(stage.GetRootLayer().ExportToString())
|
Success
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #usda 1.0
(
endTimeCode = 4
startTimeCode = 1
)
def "TestModel" (
clips = {
dictionary default = {
asset[] assetPaths = [@d:/work/py37/USD/clip/clip1.usda@, @d:/work/py37/USD/clip/clip2.usda@]
asset manifestAssetPath = @d:/work/py37/USD/clip/manifest_sample.usda@
}
}
)
{
double a
double b
}
|
In [10]:
| # Clip側にある読み先のPrimを指定する
clipAPI.SetClipPrimPath('/Model')
|
In [11]:
| # CurrentTime時にどのClipを使用するかIndexを指定する
for num,c in enumerate([a,b]):
currentActive = list(clipAPI.GetClipActive())
currentActive.append([num+1,num])
clipAPI.SetClipActive(currentActive)
|
In [12]:
| print(stage.GetRootLayer().ExportToString())
stage.GetRootLayer().Export(ROOT_PATH + 'result.usda')
|
Success
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 | #usda 1.0
(
endTimeCode = 4
startTimeCode = 1
)
def "TestModel" (
clips = {
dictionary default = {
double2[] active = [(1, 0), (2, 1)]
asset[] assetPaths = [@d:/work/py37/USD/clip/clip1.usda@, @d:/work/py37/USD/clip/clip2.usda@]
asset manifestAssetPath = @d:/work/py37/USD/clip/manifest_sample.usda@
string primPath = "/Model"
}
}
)
{
double a
double b
}
|