I am working on a tool that generates USD data to be used in animation software, mainly as sets. I’m currently working on adding in some idle background animations to some objects.
The basic setup is that I have the file containing all of the prims, including the prims for animated objects (but with just default values). I then have an _anim.usd file which contains the prims for those animated objects which contain timesampled data, and I have an accompanying _anim.manifest.usd file as the manifest. I am using a single usd file that contains all timesampled data, rather than individual usd files for each frame, out of simplicity.
In the main file, I then set up the clip on the prims for animated objects. Having read the documentation, it should work, but it’s not loading in the _anim.usd file.
I’ve tried loading it in four different applications and none load in the animation. In Houdini, I ended up adding in a value clip node and copying over the clip data, and then it works. Comparing the metadata for the animated prims between with and without the value clip node, they are identical. Yet, without the value clip node in Houdini, it’s just not loading in the animation file.
I opened up the file in usdview with debug flags turned on, and I can see that it’s trying to look up the _anim.usd file in the SdfLayerRegistry, so it is seeing it somewhere, just not actually loading it in.
Here’s what the prim for an animated object looks like as exported out by my application (geometry data is empty, because the actual geometry is stored in the timesampled _anim.usd file):
def Mesh "hytale_Bench_Alchemy_65_0_0_0__0"(
clips = {
dictionary default = {
asset[] assetPaths = [@C:/Users/me/OneDrive/Documenten/_SOFTWARE_/MCWorldExporter/MCWorldExporter/test22_chunks/region_1_chunk_1_1_anim.usd@]
asset manifestAssetPath = @C:/Users/me/OneDrive/Documenten/_SOFTWARE_/MCWorldExporter/MCWorldExporter/test22_chunks/region_1_chunk_1_1_anim.manifest.usd@
double2[] active = [(0,0)]
string primPath = "/hytale_Bench_Alchemy_65_0_0_0_"
double2[] times = [(0.0,0.0),(31.0,31.0)]
}
}
kind = "subcomponent"
apiSchemas = ["MaterialBindingAPI"]
)
{
double3 xformOp:translate = (-96.0,0.0,-96.0)
uniform token[] xformOpOrder = ["xformOp:translate"]
rel material:binding = </chunk/materials.MAT_hytale_Blocks_Benches_Alchemy_Texture>
uniform bool doubleSided = false
int primvars:ri:attributes:Ri:Sides = 1
uniform token subdivisionScheme = "none"
point3f[] points = []
int[] faceVertexIndices = []
int[] faceVertexCounts = []
texCoord2f[] primvars:st = [](
interpolation = "faceVarying"
)
int[] primvars:st:indices = []
normal3f[] primvars:normals = [](
interpolation = "faceVarying"
)
int[] primvars:normals:indices = []
color3f[] primvars:displayColor = [(0.042987008,0.042987008,0.024222942)]
}
And this is the layer data that the value clip node in Houdini is composing on top:
#sdf 1.4.32
(
framesPerSecond = 24
metersPerUnit = 1
timeCodesPerSecond = 24
)
def HoudiniLayerInfo "HoudiniLayerInfo" (
customData = {
int HoudiniCreatorNode = 14
int[] HoudiniEditorNodes = [14, 15]
}
)
{
}
def "world" (
customData = {
int[] HoudiniPrimEditorNodes = [14]
}
prepend references = @C:/Users/me/OneDrive/Documenten/_SOFTWARE_/MCWorldExporter/MCWorldExporter/test22.usd@
)
{
over "foreground"
{
over "region_1_chunk_1_1"
{
over "hytale_Bench_Alchemy_65_0_0_0__0" (
clips = {
dictionary default = {
double2[] active = [(0, 0)]
asset[] assetPaths = [@C:/Users/me/OneDrive/Documenten/_SOFTWARE_/MCWorldExporter/MCWorldExporter/test22_chunks/region_1_chunk_1_1_anim.usd@]
string primPath = "/hytale_Bench_Alchemy_65_0_0_0_"
double2[] times = [(0, 0), (31, 31)]
}
}
)
{
}
}
}
}
I cannot see nor understand what the value clip node in Houdini is doing that causes it to suddenly load in the _anim.usd file, but the original USD data that should be identical doesn’t load in the _anim.usd file. Does anybody have an idea what I might be doing wrong when writing the USD data out of my tool?
Also, as a side note, the tool is written in Java and I didn’t want to have to set up bindings with the USD libraries, so I have written my own very basic usda file writer. That’s why the formatting is a bit off on the usd data outputted by my tool, but it is still validly formatted usda data, so that shouldn’t be the issue.