Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,8 @@ Legend: :white_check_mark: Supported | :construction: Planned | :thinking: Consi
| Attribute resolution | `12.3` | :white_check_mark: | `0.2.0` | timeSamples, default, ValueBlock |
| Attribute resolution (with time) | `12.3` | :white_check_mark: | `0.1.2` | Time sample lookup |
| Spline evaluation | `12.5.3` | :construction: | | Bezier/Hermite curve interpolation |
| Interpolation (Held) | `12.5.1` | :construction: | | Not implemented at stage level |
| Interpolation (Linear) | `12.5.2` | :construction: | | Not implemented at stage level |
| Interpolation (Held) | `12.5.1` | :white_check_mark: | `main` | `Stage::value_at(attr, time)` with `InterpolationType::Held`. |
| Interpolation (Linear) | `12.5.2` | :white_check_mark: | `main` | `Stage::value_at(attr, time)` with `InterpolationType::Linear` (default). All §12.5.2 types incl. `quath`/`f`/`d` via slerp; held-fallback for unsupported types and past-last-sample. |
| [Value clips](https://openusd.org/release/api/_usd__page__value_clips.html) | `12.3` | :construction: | | `clips`/`clipSets` for split time samples |
| Relationship targets (raw + forwarded) | `12.4` | :construction: | | `targetPaths` readable; forwarding not implemented |
| Attribute connections | `12.4` | :construction: | | `connectionPaths` readable; not resolved |
Expand Down
43 changes: 43 additions & 0 deletions fixtures/interp_scene.usda
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#usda 1.0
(
defaultPrim = "Prim"
doc = "Time-sample interpolation integration test fixture: covers scalar double, vec3f, quatf (slerp), matrix4d, the unsupported-type → held fallback, and a blocked sample."
)

def Xform "Prim"
{
# Scalar — linear interp over a known span.
double scalar.timeSamples = {
0: 0.0,
10: 20.0,
}

# Vector — component-wise linear.
float3 vec.timeSamples = {
0: (0.0, 0.0, 0.0),
10: (10.0, 20.0, 30.0),
}

# Quaternion — 0 → 180° rotation about +X via slerp. At t=5 the
# result should be a 90° rotation: (cos(45°), sin(45°), 0, 0).
quatf rot.timeSamples = {
0: (1, 0, 0, 0),
10: (0, 1, 0, 0),
}

# Token is NOT in §12.5.2's linear-supported set — falls back to
# held.
token label.timeSamples = {
0: "alpha",
10: "omega",
}

# ValueBlock anywhere in the bracketing pair → value_at returns None.
double blocked.timeSamples = {
0: 1.0,
10: None,
}

# No timeSamples at all → fall back to the attribute's default.
double static = 42.0
}
Loading
Loading